home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / pc / 3DTOSHI2.ZIP / mpg3d / source / lg3drasm.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1996-04-15  |  102.4 KB  |  4,496 lines

  1.  
  2. // lg3drasm.cpp
  3. //
  4. // Copyright (c) 1996 by Toshiaki Tsuji, all rights reserved.
  5.  
  6. #include "stdgfx.h"
  7. #include "lg3dras.h"
  8.  
  9. LONG  _LeftX;
  10. LONG  _LeftY;
  11. LONG  _LeftU;
  12. LONG  _LeftV;
  13. LONG  _LeftI;
  14. LONG  _LeftZ;
  15. LONG  _LeftH;
  16.   
  17. LONG  _RightX;
  18. LONG  _RightY;
  19. LONG  _RightU;
  20. LONG  _RightV;
  21. LONG  _RightI;
  22. LONG  _RightZ;
  23. LONG  _RightH;
  24.   
  25. LONG  _LeftDx;
  26. LONG  _LeftDy;
  27. LONG  _LeftDu;
  28. LONG  _LeftDv;
  29. LONG  _LeftDI;
  30. LONG  _LeftDz;
  31. LONG  _LeftDh;
  32.   
  33. LONG  _RightDx;
  34. LONG  _RightDy;
  35. LONG  _RightDu;
  36. LONG  _RightDv;
  37. LONG  _RightDI;
  38. LONG  _RightDz;
  39. LONG  _RightDh;
  40.     
  41. BYTE*  _DestBuffer;
  42. BYTE*  _TextureBuffer;
  43. LONG   _AddDest;
  44. BYTE*  _ShadeBuffer;
  45. BYTE*  _BlendBuffer;
  46. BYTE*  _HazeBuffer;
  47. float* _DivTable;
  48.  
  49. LONG  Color;
  50. LONG  LoopCount;
  51. LONG  VMinX;
  52. LONG  VMaxX;
  53. LONG  VMinY;
  54. LONG  VMaxY;
  55. LONG  TempLen;
  56. LONG  TempVal;
  57.   
  58. // Inner Loop Delta
  59. LONG  InDeltaDI;
  60. LONG  InDeltaDu;
  61. LONG  InDeltaDv;
  62. LONG  InDeltaDh;
  63.  
  64. SHORT InLoopCount;
  65.  
  66. float DummyFloat;
  67.  
  68. // VOID _SetViewPortData ( LONG MinX, LONG MinY, LONG MaxX, LONG MaxY )
  69. //
  70. // EAX = MinX, EDX = MinY, EBX = MaxX, ECX = MaxY
  71.  
  72. VOID _SetViewPortData ( LONG MinX, LONG MinY, 
  73.                           LONG MaxX, LONG MaxY )
  74. {
  75. _asm {
  76.   pushad
  77.   mov  EAX, MinX
  78.   mov  EDX, MinY
  79.   mov  EBX, MaxX
  80.   mov  ECX, MaxY
  81.   mov  VMinX, EAX
  82.   mov  VMinY, EDX
  83.   mov  VMaxX, EBX
  84.   mov  VMaxY, ECX
  85.   popad
  86. } // End asm
  87. } // End of _SetViewPortData
  88.  
  89.  
  90. // VOID _DrawSolidNoHorz ( LONG Color, LONG LoopCount, LONG SkipRow, LONG SideClipped )
  91. //
  92. // EAX = Color, EDX = LoopCount, EBX = SkipRow, ECX = SideClipped
  93.  
  94. VOID _DrawSolidNoHorz ( LONG nColor, LONG nLoopCount, 
  95.                           LONG SkipRow, LONG SideClipped )
  96. {
  97. _asm {
  98.   pushad
  99.  
  100.   mov EAX, nColor
  101.   mov EDX, nLoopCount
  102.   mov EBX, SkipRow
  103.   mov ECX, SideClipped
  104.     
  105.   mov  Color, EAX
  106.  
  107.   sub  EDX, EBX
  108.   mov  LoopCount, EDX
  109.  
  110.   cmp  EBX, 0
  111.   je   CheckClippedSolidNoHorz 
  112.  
  113.     mov  EAX, _LeftDx
  114.     imul  EBX
  115.     add  _LeftX, EAX
  116.  
  117.     mov  EAX, _RightDx
  118.     imul  EBX
  119.     add  _RightX, EAX
  120.  
  121.     mov  EAX, _AddDest
  122.     imul  EBX
  123.     add  _DestBuffer, EAX
  124.  
  125.   CheckClippedSolidNoHorz :
  126.     cmp  ECX, 0
  127.     jne  DrawSolidNoHorzClip
  128.  
  129.  ; DrawSolidNoHorzNoClip :
  130.     cld
  131.     mov  ESI, LoopCount
  132.     cmp  ESI, 0
  133.     jle  EndLoopOutSolidNoHorz
  134.     adc  EAX, 0        ; Make sure the loop starts with U pipe
  135.     nop          
  136.  
  137.     LoopOutSolidNoHorz :
  138.       mov  EBX, _LeftX    ; U
  139.       mov  EAX, EBX        ; U
  140.       add  EBX, _LeftDx   ; V
  141.       sar  EAX, 16         ; U EAX is the Left X
  142.       mov  _LeftX, EBX    ; V
  143.  
  144.       mov  EDX, _RightX   ; U
  145.       mov  ECX, EDX        ; U
  146.       add  EDX, _RightDx  ; V
  147.       sar  ECX, 16         ; U ECX is the Right X
  148.       mov  _RightX, EDX   ; V
  149.  
  150.       mov  EBX, _DestBuffer  ; U
  151.       mov  EDI, EBX           ; U
  152.       add  EBX, _AddDest     ; V
  153.       mov  _DestBuffer, EBX  ; U
  154.  
  155.       sub  ECX, EAX           ; V
  156.       add  EDI, EAX           ; U
  157.       inc  ECX                ; V
  158.       cmp  ECX, 0
  159.       jle  NextRowSolidNoHorzNoClip 
  160.  
  161.       mov  EAX, Color         ; U
  162.       mov  EDX, ECX           ; V
  163.     
  164.       shr  ECX, 2             ; U
  165.       and  EDX, 3             ; V
  166.       rep  stosd
  167.       mov  ECX, EDX
  168.       rep  stosb
  169.  
  170.       NextRowSolidNoHorzNoClip :
  171.         dec  ESI
  172.         jnz  LoopOutSolidNoHorz
  173.       jmp  EndLoopOutSolidNoHorz
  174.  
  175.   DrawSolidNoHorzClip :
  176.     cld
  177.     mov  ESI, LoopCount
  178.     cmp  ESI, 0
  179.     jle  EndLoopOutSolidNoHorz
  180.     adc  EAX, 0        ; Make sure the loop starts with U pipe
  181.     nop          
  182.  
  183.     LoopOutClippedSolidNoHorz :
  184.       mov  EBX, _LeftX    ; U
  185.       mov  EAX, EBX        ; U
  186.       add  EBX, _LeftDx   ; V
  187.       sar  EAX, 16         ; U EAX is the Left X
  188.       mov  _LeftX, EBX    ; V
  189.  
  190.       mov  EDX, _RightX   ; U
  191.       mov  ECX, EDX        ; U
  192.       add  EDX, _RightDx  ; V
  193.       sar  ECX, 16         ; U ECX is the Right X
  194.       mov  _RightX, EDX   ; V
  195.  
  196.       mov  EBX, _DestBuffer  ; U
  197.       mov  EDI, EBX           ; U
  198.       add  EBX, _AddDest     ; V
  199.       mov  _DestBuffer, EBX  ; U
  200.  
  201.         ; Check for Easy reject
  202.         cmp  EAX, VMaxX      ; Left is greater than MaxX
  203.         jg   NextRowSolidNoHorz
  204.         cmp  ECX, VMinX      ; Right is smaller than MinX
  205.         jl   NextRowSolidNoHorz
  206.  
  207.         ; Check for Left
  208.         cmp  EAX, VMinX
  209.         jge  CheckRightSolidNoHorz
  210.           mov  EAX, VMinX    ; Set Left to MinX
  211.  
  212.         ; Check for Right
  213.       CheckRightSolidNoHorz :
  214.         cmp  ECX, VMaxX
  215.         jle  StartSolidNoHorz
  216.         mov  ECX, VMaxX    ; Set Right to MaxX
  217.  
  218.     StartSolidNoHorz :
  219.       sub  ECX, EAX
  220.       inc  ECX
  221.       cmp  ECX, 0
  222.       jle  NextRowSolidNoHorz
  223.  
  224.       add  EDI, EAX           
  225.  
  226.       mov  EAX, Color         
  227.       mov  EDX, ECX           
  228.     
  229.       shr  ECX, 2             
  230.       and  EDX, 3             
  231.       rep  stosd
  232.       mov  ECX, EDX
  233.       rep  stosb
  234.     
  235.       NextRowSolidNoHorz : 
  236.         dec  ESI
  237.       jnz  LoopOutClippedSolidNoHorz
  238.  
  239.   EndLoopOutSolidNoHorz :
  240.  
  241.   popad
  242. } // End asm
  243. } // End of _DrawSolidNoHorz
  244.  
  245.  
  246. // VOID _DrawSolidGrdHorz ( LONG Color, LONG LoopCount, LONG SkipRow, LONG SideClipped )
  247. //
  248. // EAX = Color, EDX = LoopCount, EBX = SkipRow, ECX = SideClipped
  249.  
  250. VOID _DrawSolidGrdHorz ( LONG nColor, LONG nLoopCount, LONG SkipRow, 
  251.                          LONG SideClipped )
  252. {
  253. _asm {
  254.   pushad
  255.  
  256.   mov EAX, nColor
  257.   mov EDX, nLoopCount
  258.   mov EBX, SkipRow
  259.   mov ECX, SideClipped
  260.     
  261.   mov  Color, EAX
  262.  
  263.   sub  EDX, EBX
  264.   mov  LoopCount, EDX
  265.  
  266.   cmp  EBX, 0
  267.   je   CheckClippedSolidGrdHorz 
  268.  
  269.     mov  EAX, _LeftDx
  270.     imul  EBX
  271.     add  _LeftX, EAX
  272.  
  273.     mov  EAX, _RightDx
  274.     imul  EBX
  275.     add  _RightX, EAX
  276.  
  277.     mov  EAX, _LeftDI
  278.     imul  EBX
  279.     add  _LeftI, EAX
  280.  
  281.     mov  EAX, _RightDI
  282.     imul  EBX
  283.     add  _RightI, EAX
  284.  
  285.     mov  EAX, _AddDest
  286.     imul  EBX
  287.     add  _DestBuffer, EAX
  288.  
  289.   CheckClippedSolidGrdHorz :
  290.     cmp  ECX, 0
  291.     jne  DrawSolidGrdHorzClip
  292.  
  293. ;  DrawSolidGrdHorzNoClip :
  294.     cld
  295.     mov  ESI, LoopCount
  296.     cmp  ESI, 0
  297.     jle  EndLoopOutSolidGrdHorz
  298.     adc  EAX, 0        ; Make sure the loop starts with U pipe
  299.     nop          
  300.  
  301.     LoopOutSolidGrdHorz :
  302.       mov  EBX, _LeftX    ; U
  303.       mov  EAX, EBX        ; U
  304.       add  EBX, _LeftDx   ; V
  305.       sar  EAX, 16         ; U EAX is the Left X
  306.       mov  _LeftX, EBX    ; V
  307.  
  308.       mov  EDX, _RightX   ; U
  309.       mov  ECX, EDX        ; U
  310.       add  EDX, _RightDx  ; V
  311.       sar  ECX, 16         ; U ECX is the Right X
  312.       mov  _RightX, EDX   ; V
  313.  
  314.       mov  EBX, _DestBuffer  ; U
  315.       mov  EDI, EBX           ; U
  316.       add  EBX, _AddDest     ; V
  317.       sub  ECX, EAX           ; U
  318.  
  319.       mov  _DestBuffer, EBX  ; V
  320.  
  321.       add  EDI, EAX           ; U
  322.       inc  ECX                ; V
  323.       
  324.       mov  EBX, _LeftI    ; U
  325.       mov  EAX, EBX        ; U     EAX is the Left I
  326.       add  EBX, _LeftDI   ; V
  327.       mov  _LeftI, EBX    ; V
  328.       
  329.       mov  EBX, _RightI   ; U
  330.       mov  EDX, EBX        ; U     EDX is the Right I
  331.       add  EBX, _RightDI  ; V
  332.       mov  _RightI, EBX   ; V
  333.       
  334.       cmp  ECX, 0
  335.       jle  NextRowSolidGrdHorzNoClip
  336.  
  337.       mov  EBX, EAX        ; EBX is the Left I
  338.       sub  EDX, EAX
  339.       mov  EAX, EDX
  340.       sar  EDX, 01Fh
  341.       idiv ECX
  342.       mov  InDeltaDI, EAX
  343.  
  344.       mov  EBP, EBX
  345.       mov  EAX, Color        
  346.       mov  EDX, InDeltaDI 
  347.       push ESI
  348.       mov  ESI, _ShadeBuffer
  349.       
  350.         InLoopSolidGrdHorz :
  351.           mov  EBX, EBP
  352.           shr  EBX, 8
  353.           mov  BL, AL
  354.           add  EBP, EDX
  355.           mov  AH, [EBX+ESI]
  356.           mov  [EDI], AH
  357.           inc  EDI
  358.           loop InLoopSolidGrdHorz
  359.  
  360.       pop  ESI
  361.  
  362.       NextRowSolidGrdHorzNoClip :
  363.         dec  ESI
  364.         jnz  LoopOutSolidGrdHorz
  365.       jmp  EndLoopOutSolidGrdHorz
  366.  
  367.   DrawSolidGrdHorzClip :
  368.     cld
  369.     mov  ESI, LoopCount
  370.     cmp  ESI, 0
  371.     jle  EndLoopOutSolidGrdHorz
  372.     adc  EAX, 0        ; Make sure the loop starts with U pipe
  373.     nop          
  374.  
  375.     LoopOutClippedSolidGrdHorz :
  376.       mov  EBX, _LeftX    ; U
  377.       mov  EAX, EBX        ; U
  378.       add  EBX, _LeftDx   ; V
  379.       sar  EAX, 16         ; U EAX is the Left X
  380.       mov  _LeftX, EBX    ; V
  381.  
  382.       mov  EDX, _RightX   ; U
  383.       mov  ECX, EDX        ; U
  384.       add  EDX, _RightDx  ; V
  385.       sar  ECX, 16         ; U ECX is the Right X
  386.       mov  _RightX, EDX   ; V
  387.  
  388.       mov  EBX, _DestBuffer  ; U
  389.       mov  EDI, EBX           ; U
  390.       add  EBX, _AddDest     ; V
  391.       mov  _DestBuffer, EBX  ; U
  392.  
  393.       mov  TempLen, ECX
  394.       sub  TempLen, EAX
  395.       inc  TempLen
  396.       mov  EBX, 0
  397.  
  398.         ; Check for Easy reject
  399.         cmp  EAX, VMaxX      ; Left is greater than MaxX
  400.         jg   NextRowSolidGrdHorz
  401.         cmp  ECX, VMinX      ; Right is smaller than MinX
  402.         jl   NextRowSolidGrdHorz
  403.  
  404.         ; Check for Left
  405.         cmp  EAX, VMinX
  406.         jge  CheckRightSolidGrdHorz
  407.           mov  EBX, VMinX
  408.           sub  EBX, EAX
  409.           mov  EAX, VMinX    ; Set Left to MinX
  410.  
  411.         ; Check for Right
  412.         CheckRightSolidGrdHorz :
  413.           cmp  ECX, VMaxX
  414.           jle  StartSolidGrdHorz
  415.           mov  ECX, VMaxX    ; Set Right to MaxX
  416.  
  417.     StartSolidGrdHorz :  ; Clipped
  418.       sub  ECX, EAX
  419.       inc  ECX
  420.  
  421.       add  EDI, EAX
  422.  
  423.       mov  EBP, TempLen    ; EBP is the loop count before clipped
  424.       mov  TempLen, EBX    ; TempLen is now the skip pixel in x-direction
  425.  
  426.       mov  EBX, _LeftI    ; U
  427.       mov  EAX, EBX        ; U   EAX is the Left I
  428.       add  EBX, _LeftDI   ; V
  429.       mov  _LeftI, EBX    ; V
  430.       
  431.       mov  EBX, _RightI   ; U
  432.       mov  EDX, EBX        ; U   EDX is the Right I
  433.       add  EBX, _RightDI  ; V
  434.       mov  _RightI, EBX   ; V
  435.             
  436.       cmp  ECX, 0
  437.       jle  NextRowSolidGrdHorz
  438.  
  439.       mov  EBX, EAX        ; EAX is Left I
  440.       sub  EDX, EAX
  441.       mov  EAX, EDX
  442.       sar  EDX, 01Fh
  443.       idiv EBP
  444.       mov  InDeltaDI, EAX
  445.  
  446.       ; Add Delta for Skipped pixel
  447.       mov  EBP, EBX
  448.       mov  EAX, InDeltaDI
  449.       imul TempLen 
  450.       add  EBP, EAX
  451.  
  452.       mov  EAX, Color        
  453.       mov  EDX, InDeltaDI 
  454.       push ESI
  455.       mov  ESI, _ShadeBuffer
  456.       
  457.         InLoopClippedSolidGrdHorz :
  458.           mov  EBX, EBP
  459.           shr  EBX, 8
  460.           mov  BL, AL
  461.           mov  AH, [EBX+ESI]
  462.           add  EBP, EDX
  463.           mov  [EDI], AH
  464.           inc  EDI
  465.           loop InLoopClippedSolidGrdHorz
  466.     
  467.       pop  ESI
  468.       NextRowSolidGrdHorz : 
  469.         dec  ESI
  470.       jnz  LoopOutClippedSolidGrdHorz
  471.  
  472.   EndLoopOutSolidGrdHorz :
  473.  
  474.   popad
  475. } // End asm
  476. } // End of _DrawSolidGrdHorz
  477.  
  478.  
  479. // VOID _DrawTextureNoHorz ( LONG Color, LONG LoopCount, LONG SkipRow, LONG SideClipped )
  480. //
  481. // EAX = Color, EDX = LoopCount, EBX = SkipRow, ECX = SideClipped
  482.  
  483. VOID _DrawTextureNoHorz ( LONG nColor, LONG nLoopCount, 
  484.                           LONG SkipRow, LONG SideClipped )
  485. {
  486. _asm {
  487.   pushad
  488.  
  489.   mov EAX, nColor
  490.   mov EDX, nLoopCount
  491.   mov EBX, SkipRow
  492.   mov ECX, SideClipped
  493.  
  494.   sub  EDX, EBX
  495.   mov  LoopCount, EDX
  496.  
  497.   cmp  EBX, 0
  498.   je   CheckClippedTextureNoHorz 
  499.  
  500.     mov  EAX, _LeftDx
  501.     imul  EBX
  502.     add  _LeftX, EAX
  503.  
  504.     mov  EAX, _RightDx
  505.     imul  EBX
  506.     add  _RightX, EAX
  507.  
  508.     mov  EAX, _LeftDu
  509.     imul  EBX
  510.     add  _LeftU, EAX
  511.  
  512.     mov  EAX, _RightDu
  513.     imul  EBX
  514.     add  _RightU, EAX
  515.  
  516.     mov  EAX, _LeftDv
  517.     imul  EBX
  518.     add  _LeftV, EAX
  519.  
  520.     mov  EAX, _RightDv
  521.     imul  EBX
  522.     add  _RightV, EAX
  523.  
  524.     mov  EAX, _AddDest
  525.     imul  EBX
  526.     add  _DestBuffer, EAX
  527.  
  528.   CheckClippedTextureNoHorz :
  529.     cmp  ECX, 0
  530.     jne  DrawTextureNoHorzClip
  531.  
  532. ;  DrawTextureNoHorzNoClip :
  533.     cld
  534.     mov  ESI, LoopCount
  535.     cmp  ESI, 0
  536.     jle  EndLoopOutTextureNoHorz
  537.     adc  EAX, 0        ; Make sure the loop starts with U pipe
  538.     nop          
  539.  
  540.     LoopOutTextureNoHorz :
  541.       mov  EBX, _LeftX    ; U
  542.       mov  EAX, EBX        ; U
  543.       add  EBX, _LeftDx   ; V
  544.       sar  EAX, 16         ; U EAX is the Left X
  545.       mov  _LeftX, EBX    ; V
  546.  
  547.       mov  EDX, _RightX   ; U
  548.       mov  ECX, EDX        ; U
  549.       add  EDX, _RightDx  ; V
  550.       sar  ECX, 16         ; U ECX is the Right X
  551.       mov  _RightX, EDX   ; V
  552.  
  553.       mov  EBX, _DestBuffer  ; U
  554.       mov  EDI, EBX           ; U
  555.       add  EBX, _AddDest     ; V
  556.       mov  _DestBuffer, EBX  ; U
  557.  
  558.       sub  ECX, EAX           ; V
  559.       add  EDI, EAX           ; U
  560.       inc  ECX                ; V
  561.             
  562.       cmp  ECX, 0
  563.       jle  NextRowTextureNoHorzNoClip
  564.  
  565.       mov  EBP, ECX
  566.       shl  EBP, 2
  567.       add  EBP, _DivTable
  568.       fld  dword ptr [EBP] 
  569.       
  570.       mov  EBP, ECX      ; EBP is the loop
  571.  
  572.       mov  EAX, _LeftU    
  573.       mov  EDX, _RightU         
  574.       sub  EDX, EAX
  575.       sar  EDX, 8
  576.       mov  InDeltaDu, EDX
  577.       fild InDeltaDu      
  578.       fmul st, st(1)
  579.       fistp InDeltaDu
  580.       
  581.       mov  EAX, _LeftV    
  582.       mov  EDX, _RightV         
  583.       sub  EDX, EAX
  584.       sar  EDX, 8
  585.       mov  InDeltaDv, EDX
  586.       fild InDeltaDv      
  587.       fmul st, st(1)
  588.       fistp InDeltaDv
  589.  
  590.       fstp DummyFloat
  591.  
  592.       push ESI
  593.  
  594.       mov  ECX, _LeftU
  595.       sar  ECX, 8
  596.       mov  EDX, _LeftV
  597.       sar  EDX, 8
  598.       mov  ESI, _TextureBuffer
  599.       mov  EBX, 0
  600.  
  601.         InLoopTextureNoHorz :
  602.           mov  BH, DH
  603.           mov  BL, CH
  604.           add  ECX, InDeltaDu
  605.           mov  AL, [EBX+ESI]
  606.           add  EDX, InDeltaDv
  607.           mov  [EDI], AL
  608.           inc  EDI
  609.           dec  EBP
  610.           jnz  InLoopTextureNoHorz
  611.  
  612.       pop  ESI
  613.  
  614.       NextRowTextureNoHorzNoClip :
  615.  
  616.       mov  EAX, _LeftU
  617.       mov  EBX, _LeftV
  618.       add  EAX, _LeftDu
  619.       add  EBX, _LeftDv
  620.       mov  _LeftU, EAX
  621.       mov  _LeftV, EBX
  622.  
  623.       mov  EAX, _RightU
  624.       mov  EBX, _RightV
  625.       add  EAX, _RightDu
  626.       add  EBX, _RightDv
  627.       mov  _RightU, EAX
  628.       mov  _RightV, EBX
  629.  
  630.       dec  ESI
  631.       jnz  LoopOutTextureNoHorz
  632.       jmp  EndLoopOutTextureNoHorz
  633.  
  634.   DrawTextureNoHorzClip :
  635.     cld
  636.     mov  ESI, LoopCount
  637.     cmp  ESI, 0
  638.     jle  EndLoopOutTextureNoHorz
  639.     adc  EAX, 0        ; Make sure the loop starts with U pipe
  640.     nop          
  641.  
  642.     LoopOutClippedTextureNoHorz :
  643.       mov  EBX, _LeftX    ; U
  644.       mov  EAX, EBX        ; U
  645.       add  EBX, _LeftDx   ; V
  646.       sar  EAX, 16         ; U EAX is the Left X
  647.       mov  _LeftX, EBX    ; V
  648.  
  649.       mov  EDX, _RightX   ; U
  650.       mov  ECX, EDX        ; U
  651.       add  EDX, _RightDx  ; V
  652.       sar  ECX, 16         ; U ECX is the Right X
  653.       mov  _RightX, EDX   ; V
  654.  
  655.       mov  EBX, _DestBuffer  ; U
  656.       mov  EDI, EBX           ; U
  657.       add  EBX, _AddDest     ; V
  658.       mov  _DestBuffer, EBX  ; U
  659.  
  660.       mov  TempLen, ECX
  661.       sub  TempLen, EAX
  662.       inc  TempLen
  663.       mov  EBX, 0
  664.  
  665.         ; Check for Easy reject
  666.         cmp  EAX, VMaxX      ; Left is greater than MaxX
  667.         jg   NextRowTextureNoHorz
  668.         cmp  ECX, VMinX      ; Right is smaller than MinX
  669.         jl   NextRowTextureNoHorz
  670.  
  671.         ; Check for Left
  672.         cmp  EAX, VMinX
  673.         jge  CheckRightTextureNoHorz
  674.           mov  EBX, VMinX
  675.           sub  EBX, EAX
  676.           mov  EAX, VMinX    ; Set Left to MinX
  677.  
  678.         ; Check for Right
  679.       CheckRightTextureNoHorz :
  680.         cmp  ECX, VMaxX
  681.         jle  StartTextureNoHorz
  682.         mov  ECX, VMaxX    ; Set Right to MaxX
  683.  
  684.     StartTextureNoHorz :
  685.       sub  ECX, EAX
  686.       inc  ECX
  687.  
  688.       cmp  ECX, 0
  689.       jle  NextRowTextureNoHorz
  690.  
  691.       add  EDI, EAX
  692.  
  693.       mov  EBP, TempLen
  694.       shl  EBP, 2
  695.       add  EBP, _DivTable
  696.       fld  dword ptr [EBP]
  697.       
  698.       mov  EBP, ECX      ; EBP is the loop
  699.       mov  TempLen, EBX
  700.  
  701.       mov  EAX, _LeftU
  702.       mov  EDX, _RightU         
  703.       sub  EDX, EAX
  704.       sar  EDX, 8
  705.       mov  InDeltaDu, EDX
  706.       fild InDeltaDu      
  707.       fmul st, st(1)
  708.       fistp InDeltaDu
  709.       
  710.       mov  EAX, _LeftV    
  711.       mov  EDX, _RightV         
  712.       sub  EDX, EAX
  713.       sar  EDX, 8
  714.       mov  InDeltaDv, EDX
  715.       fild InDeltaDv      
  716.       fmul st, st(1)
  717.       fistp InDeltaDv
  718.  
  719.       fstp  DummyFloat
  720.  
  721.       push ESI
  722.  
  723.       mov  EAX, InDeltaDu
  724.       imul TempLen
  725.       mov  ECX, _LeftU
  726.       sar  ECX, 8
  727.       add  ECX, EAX
  728.  
  729.       mov  EAX, InDeltaDv
  730.       imul TempLen
  731.       mov  EDX, _LeftV
  732.       sar  EDX, 8
  733.       add  EDX, EAX
  734.  
  735.       mov  ESI, _TextureBuffer
  736.       mov  EBX, 0
  737.  
  738.         InLoopClippedTextureNoHorz :
  739.           mov  BH, DH
  740.           mov  BL, CH
  741.           add  ECX, InDeltaDu
  742.           mov  AL, [EBX+ESI]
  743.           add  EDX, InDeltaDv
  744.           mov  [EDI], AL
  745.           inc  EDI
  746.           dec  EBP
  747.           jnz  InLoopClippedTextureNoHorz
  748.  
  749.       pop  ESI
  750.  
  751.       NextRowTextureNoHorz : 
  752.         mov  EAX, _LeftU
  753.         mov  EBX, _LeftV
  754.         add  EAX, _LeftDu
  755.         add  EBX, _LeftDv
  756.         mov  _LeftU, EAX
  757.         mov  _LeftV, EBX
  758.  
  759.         mov  EAX, _RightU
  760.         mov  EBX, _RightV
  761.         add  EAX, _RightDu
  762.         add  EBX, _RightDv
  763.         mov  _RightU, EAX
  764.         mov  _RightV, EBX
  765.  
  766.         dec  ESI
  767.       jnz  LoopOutClippedTextureNoHorz
  768.  
  769.   EndLoopOutTextureNoHorz :
  770.  
  771.   popad
  772. } // End asm
  773. } // End of _DrawTextureNoHorz
  774.  
  775.  
  776. // VOID _DrawTextureFlatHorz ( LONG Color, LONG LoopCount, LONG SkipRow, LONG SideClipped )
  777. //
  778. // EAX = Color, EDX = LoopCount, EBX = SkipRow, ECX = SideClipped
  779.  
  780. VOID _DrawTextureFlatHorz ( LONG nColor, LONG nLoopCount, 
  781.                             LONG SkipRow, LONG SideClipped )
  782. {
  783. _asm {
  784.   pushad
  785.  
  786.   mov EAX, nColor
  787.   mov EDX, nLoopCount
  788.   mov EBX, SkipRow
  789.   mov ECX, SideClipped
  790.  
  791.   sub  EDX, EBX
  792.   mov  LoopCount, EDX
  793.  
  794.   cmp  EBX, 0
  795.   je   CheckClippedTextureFlatHorz 
  796.  
  797.     mov  EAX, _LeftDx
  798.     imul  EBX
  799.     add  _LeftX, EAX
  800.  
  801.     mov  EAX, _RightDx
  802.     imul  EBX
  803.     add  _RightX, EAX
  804.  
  805.     mov  EAX, _LeftDu
  806.     imul  EBX
  807.     add  _LeftU, EAX
  808.  
  809.     mov  EAX, _RightDu
  810.     imul  EBX
  811.     add  _RightU, EAX
  812.  
  813.     mov  EAX, _LeftDv
  814.     imul  EBX
  815.     add  _LeftV, EAX
  816.  
  817.     mov  EAX, _RightDv
  818.     imul  EBX
  819.     add  _RightV, EAX
  820.  
  821.     mov  EAX, _AddDest
  822.     imul  EBX
  823.     add  _DestBuffer, EAX
  824.  
  825.   CheckClippedTextureFlatHorz :
  826.     cmp  ECX, 0
  827.     jne  DrawTextureFlatHorzClip
  828.  
  829. ;  DrawTextureFlatHorzNoClip :
  830.     cld
  831.     mov  ESI, LoopCount
  832.     cmp  ESI, 0
  833.     jle  EndLoopOutTextureFlatHorz
  834.     adc  EAX, 0        ; Make sure the loop starts with U pipe
  835.     nop          
  836.  
  837.     LoopOutTextureFlatHorz :
  838.       mov  EBX, _LeftX    ; U
  839.       mov  EAX, EBX        ; U
  840.       add  EBX, _LeftDx   ; V
  841.       sar  EAX, 16         ; U EAX is the Left X
  842.       mov  _LeftX, EBX    ; V
  843.  
  844.       mov  EDX, _RightX   ; U
  845.       mov  ECX, EDX        ; U
  846.       add  EDX, _RightDx  ; V
  847.       sar  ECX, 16         ; U ECX is the Right X
  848.       mov  _RightX, EDX   ; V
  849.  
  850.       mov  EBX, _DestBuffer  ; U
  851.       mov  EDI, EBX           ; U
  852.       add  EBX, _AddDest     ; V
  853.       sub  ECX, EAX           ; U
  854.  
  855.       mov  _DestBuffer, EBX  ; V
  856.  
  857.       add  EDI, EAX           ; U
  858.       inc  ECX                ; V
  859.  
  860.       cmp  ECX, 0
  861.       jle  NextRowTextureFlatHorzNoClip
  862.  
  863.       mov  EBP, ECX
  864.       shl  EBP, 2
  865.       add  EBP, _DivTable
  866.       fld  dword ptr [EBP]
  867.       
  868.       mov  EBP, ECX      ; EBP is the loop
  869.  
  870.       mov  EAX, _LeftU    
  871.       mov  EDX, _RightU         
  872.       sub  EDX, EAX
  873.       sar  EDX, 8
  874.       mov  InDeltaDu, EDX
  875.       fild InDeltaDu      
  876.       fmul st, st(1)
  877.       fistp InDeltaDu
  878.       
  879.       mov  EAX, _LeftV    
  880.       mov  EDX, _RightV         
  881.       sub  EDX, EAX
  882.       sar  EDX, 8
  883.       mov  InDeltaDv, EDX
  884.       fild InDeltaDv      
  885.       fmul st, st(1)
  886.       fistp InDeltaDv
  887.  
  888.       fstp DummyFloat
  889.  
  890.       push ESI
  891.  
  892.       mov  ECX, _LeftU
  893.       mov  EDX, _LeftV
  894.       sar  ECX, 8
  895.       sar  EDX, 8
  896.  
  897.       mov  EAX, _LeftI
  898.       sar  EAX, 8
  899.       mov  ESI, _ShadeBuffer
  900.       
  901.         InLoopTextureFlatHorz :
  902.           mov  EBX, 0
  903.           mov  BH, DH
  904.           mov  BL, CH
  905.           add  ECX, InDeltaDu
  906.           add  EBX, _TextureBuffer
  907.           mov  AL, [EBX]
  908.           add  EDX, InDeltaDv
  909.           mov  BL, [ESI+EAX]
  910.           mov  [EDI], BL
  911.           inc  EDI
  912.           dec  EBP
  913.           jnz  InLoopTextureFlatHorz
  914.     
  915.       pop  ESI
  916.  
  917.       NextRowTextureFlatHorzNoClip : 
  918.         mov  EAX, _LeftU
  919.         mov  EBX, _LeftV
  920.         add  EAX, _LeftDu
  921.         add  EBX, _LeftDv
  922.         mov  _LeftU, EAX
  923.         mov  _LeftV, EBX
  924.  
  925.         mov  EAX, _RightU
  926.         mov  EBX, _RightV
  927.         add  EAX, _RightDu
  928.         add  EBX, _RightDv
  929.         mov  _RightU, EAX
  930.         mov  _RightV, EBX
  931.  
  932.         dec  ESI
  933.       jnz  LoopOutTextureFlatHorz
  934.       jmp  EndLoopOutTextureFlatHorz
  935.  
  936.   DrawTextureFlatHorzClip :
  937.     cld
  938.     mov  ESI, LoopCount
  939.     cmp  ESI, 0
  940.     jle  EndLoopOutTextureFlatHorz
  941.     adc  EAX, 0        ; Make sure the loop starts with U pipe
  942.     nop          
  943.  
  944.     LoopOutClippedTextureFlatHorz :
  945.       mov  EBX, _LeftX    ; U
  946.       mov  EAX, EBX        ; U
  947.       add  EBX, _LeftDx   ; V
  948.       sar  EAX, 16         ; U EAX is the Left X
  949.       mov  _LeftX, EBX    ; V
  950.  
  951.       mov  EDX, _RightX   ; U
  952.       mov  ECX, EDX        ; U
  953.       add  EDX, _RightDx  ; V
  954.       sar  ECX, 16         ; U ECX is the Right X
  955.       mov  _RightX, EDX   ; V
  956.  
  957.       mov  EBX, _DestBuffer  ; U
  958.       mov  EDI, EBX           ; U
  959.       add  EBX, _AddDest     ; V
  960.       mov  _DestBuffer, EBX  ; U
  961.  
  962.       mov  TempLen, ECX
  963.       sub  TempLen, EAX
  964.       inc  TempLen
  965.       mov  EBX, 0
  966.  
  967.         ; Check for Easy reject
  968.         cmp  EAX, VMaxX      ; Left is greater than MaxX
  969.         jg   NextRowTextureFlatHorz
  970.         cmp  ECX, VMinX      ; Right is smaller than MinX
  971.         jl   NextRowTextureFlatHorz
  972.  
  973.         ; Check for Left
  974.         cmp  EAX, VMinX
  975.         jge  CheckRightTextureFlatHorz
  976.           mov  EBX, VMinX
  977.           sub  EBX, EAX
  978.           mov  EAX, VMinX    ; Set Left to MinX
  979.  
  980.         ; Check for Right
  981.         CheckRightTextureFlatHorz :
  982.           cmp  ECX, VMaxX
  983.           jle  StartTextureFlatHorz
  984.           mov  ECX, VMaxX    ; Set Right to MaxX
  985.  
  986.     StartTextureFlatHorz :
  987.       sub  ECX, EAX
  988.       inc  ECX
  989.       add  EDI, EAX
  990.  
  991.       cmp  ECX, 0
  992.       jle  NextRowTextureFlatHorz
  993.  
  994.       mov  EBP, TempLen
  995.       shl  EBP, 2
  996.       add  EBP, _DivTable
  997.       fld  dword ptr [EBP]
  998.  
  999.       mov  EBP, ECX      ; EBP is the loop
  1000.  
  1001.       mov  ECX, TempLen
  1002.       mov  TempLen, EBX    ; TempLen is now the skip pixel in x-direction
  1003.  
  1004.       mov  EAX, _LeftU    
  1005.       mov  EDX, _RightU         
  1006.       sub  EDX, EAX
  1007.       sar  EDX, 8
  1008.       mov  InDeltaDu, EDX
  1009.       fild InDeltaDu      
  1010.       fmul st, st(1)
  1011.       fistp InDeltaDu
  1012.       
  1013.       mov  EAX, _LeftV    
  1014.       mov  EDX, _RightV         
  1015.       sub  EDX, EAX
  1016.       sar  EDX, 8
  1017.       mov  InDeltaDv, EDX
  1018.       fild InDeltaDv      
  1019.       fmul st, st(1)
  1020.       fistp InDeltaDv
  1021.  
  1022.       fstp DummyFloat
  1023.  
  1024.       push ESI
  1025.  
  1026.       mov  EAX, InDeltaDu
  1027.       imul TempLen
  1028.       mov  ECX, _LeftU
  1029.       sar  ECX, 8
  1030.       add  ECX, EAX
  1031.  
  1032.       mov  EAX, InDeltaDv
  1033.       imul TempLen
  1034.       mov  EDX, _LeftV
  1035.       sar  EDX, 8
  1036.       add  EDX, EAX
  1037.  
  1038.       mov  EAX, _LeftI
  1039.       sar  EAX, 8
  1040.       mov  ESI, _ShadeBuffer
  1041.       
  1042.         InLoopClippedTextureFlatHorz :
  1043.           mov  EBX, 0
  1044.           mov  BH, DH
  1045.           mov  BL, CH
  1046.           add  ECX, InDeltaDu
  1047.           add  EBX, _TextureBuffer
  1048.           mov  AL, [EBX]
  1049.           add  EDX, InDeltaDv
  1050.           mov  BL, [ESI+EAX]
  1051.           mov  [EDI], BL
  1052.           inc  EDI
  1053.           dec  EBP
  1054.           jnz  InLoopClippedTextureFlatHorz
  1055.     
  1056.       pop  ESI
  1057.  
  1058.       NextRowTextureFlatHorz : 
  1059.         mov  EAX, _LeftU
  1060.         mov  EBX, _LeftV
  1061.         add  EAX, _LeftDu
  1062.         add  EBX, _LeftDv
  1063.         mov  _LeftU, EAX
  1064.         mov  _LeftV, EBX
  1065.  
  1066.         mov  EAX, _RightU
  1067.         mov  EBX, _RightV
  1068.         add  EAX, _RightDu
  1069.         add  EBX, _RightDv
  1070.         mov  _RightU, EAX
  1071.         mov  _RightV, EBX
  1072.  
  1073.         dec  ESI
  1074.       jnz  LoopOutClippedTextureFlatHorz
  1075.  
  1076.   EndLoopOutTextureFlatHorz :
  1077.  
  1078.   popad
  1079. } // End asm
  1080. } // End of _DrawTextureFlatHorz
  1081.  
  1082.  
  1083. // VOID _DrawTextureGrdHorz ( LONG Color, LONG LoopCount, LONG SkipRow, LONG SideClipped )
  1084. //
  1085. // EAX = Color, EDX = LoopCount, EBX = SkipRow, ECX = SideClipped
  1086.  
  1087. VOID _DrawTextureGrdHorz ( LONG nColor, LONG nLoopCount, 
  1088.                            LONG SkipRow, LONG SideClipped )
  1089. {
  1090. _asm {
  1091.   pushad
  1092.  
  1093.   mov EAX, nColor
  1094.   mov EDX, nLoopCount
  1095.   mov EBX, SkipRow
  1096.   mov ECX, SideClipped
  1097.  
  1098.   mov  Color, EAX
  1099.  
  1100.   sub  EDX, EBX
  1101.   mov  LoopCount, EDX
  1102.  
  1103.   cmp  EBX, 0
  1104.   je   CheckClippedTextureGrdHorz 
  1105.  
  1106.     mov  EAX, _LeftDx
  1107.     imul  EBX
  1108.     add  _LeftX, EAX
  1109.  
  1110.     mov  EAX, _RightDx
  1111.     imul  EBX
  1112.     add  _RightX, EAX
  1113.  
  1114.     mov  EAX, _LeftDu
  1115.     imul  EBX
  1116.     add  _LeftU, EAX
  1117.  
  1118.     mov  EAX, _RightDu
  1119.     imul  EBX
  1120.     add  _RightU, EAX
  1121.  
  1122.     mov  EAX, _LeftDv
  1123.     imul  EBX
  1124.     add  _LeftV, EAX
  1125.  
  1126.     mov  EAX, _RightDv
  1127.     imul  EBX
  1128.     add  _RightV, EAX
  1129.  
  1130.     mov  EAX, _LeftDI
  1131.     imul  EBX
  1132.     add  _LeftI, EAX
  1133.  
  1134.     mov  EAX, _RightDI
  1135.     imul  EBX
  1136.     add  _RightI, EAX
  1137.  
  1138.     mov  EAX, _AddDest
  1139.     imul  EBX
  1140.     add  _DestBuffer, EAX
  1141.  
  1142.   CheckClippedTextureGrdHorz :
  1143.     cmp  ECX, 0
  1144.     jne  DrawTextureGrdHorzClip
  1145.  
  1146. ;  DrawTextureGrdHorzNoClip :
  1147.     cld
  1148.     mov  ESI, LoopCount
  1149.     cmp  ESI, 0
  1150.     jle  EndLoopOutTextureGrdHorz
  1151.     adc  EAX, 0        ; Make sure the loop starts with U pipe
  1152.     nop          
  1153.  
  1154.     LoopOutTextureGrdHorz :
  1155.       mov  EBX, _LeftX    ; U
  1156.       mov  EAX, EBX        ; U
  1157.       add  EBX, _LeftDx   ; V
  1158.       sar  EAX, 16         ; U EAX is the Left X
  1159.       mov  _LeftX, EBX    ; V
  1160.  
  1161.       mov  EDX, _RightX   ; U
  1162.       mov  ECX, EDX        ; U
  1163.       add  EDX, _RightDx  ; V
  1164.       sar  ECX, 16         ; U ECX is the Right X
  1165.       mov  _RightX, EDX   ; V
  1166.  
  1167.       mov  EBX, _DestBuffer  ; U
  1168.       mov  EDI, EBX           ; U
  1169.       add  EBX, _AddDest     ; V
  1170.       sub  ECX, EAX           ; U
  1171.  
  1172.       mov  _DestBuffer, EBX  ; V
  1173.  
  1174.       add  EDI, EAX           ; U
  1175.       inc  ECX                ; V
  1176.  
  1177.       cmp  ECX, 0
  1178.       jle  NextRowTextureGrdHorzNoClip
  1179.  
  1180.       mov  EBP, ECX
  1181.       shl  EBP, 2
  1182.       add  EBP, _DivTable
  1183.       fld  dword ptr [EBP]
  1184.       
  1185.       mov  EBP, ECX      ; EBP is the loop
  1186.  
  1187.       mov  EAX, _LeftI    ; U
  1188.       mov  EDX, _RightI   ; U      
  1189.       sub  EDX, EAX
  1190.       sar  EDX, 8
  1191.       mov  EAX, EDX
  1192.       sar  EDX, 01Fh
  1193.       idiv ECX
  1194.       mov  InDeltaDI, EAX
  1195.  
  1196.       mov  EAX, _LeftU
  1197.       mov  EDX, _RightU         
  1198.       sub  EDX, EAX
  1199.       sar  EDX, 8
  1200.       mov  InDeltaDu, EDX
  1201.       fild InDeltaDu      
  1202.       fmul st, st(1)
  1203.       fistp InDeltaDu
  1204.       
  1205.       mov  EAX, _LeftV    
  1206.       mov  EDX, _RightV         
  1207.       sub  EDX, EAX
  1208.       sar  EDX, 8
  1209.       mov  InDeltaDv, EDX
  1210.       fild InDeltaDv      
  1211.       fmul st, st(1)
  1212.       fistp InDeltaDv
  1213.  
  1214.       fstp DummyFloat
  1215.  
  1216.       push ESI
  1217.       
  1218.       mov  ECX, _LeftU
  1219.       mov  EDX, _LeftV
  1220.       mov  ESI, _LeftI
  1221.       sar  ECX, 8
  1222.       sar  EDX, 8
  1223.       sar  ESI, 8
  1224.       
  1225.         InLoopTextureGrdHorz :
  1226.           mov  EBX, 0
  1227.           mov  BH, DH
  1228.           mov  BL, CH
  1229.           add  ECX, InDeltaDu
  1230.           add  EBX, _TextureBuffer
  1231.           mov  EAX, ESI
  1232.           mov  AL, [EBX]
  1233.           add  EDX, InDeltaDv
  1234.           add  EAX, _ShadeBuffer
  1235.           mov  BL, [EAX]
  1236.           add  ESI, InDeltaDI
  1237.           mov  [EDI], BL
  1238.           inc  EDI
  1239.           dec  EBP
  1240.           jnz  InLoopTextureGrdHorz
  1241.    
  1242.       pop  ESI
  1243.  
  1244.       NextRowTextureGrdHorzNoClip :
  1245.         mov  EAX, _LeftU
  1246.         mov  EBX, _LeftV
  1247.         add  EAX, _LeftDu
  1248.         add  EBX, _LeftDv
  1249.         mov  _LeftU, EAX
  1250.         mov  _LeftV, EBX
  1251.  
  1252.         mov  EAX, _RightU
  1253.         mov  EBX, _RightV
  1254.         add  EAX, _RightDu
  1255.         add  EBX, _RightDv
  1256.         mov  _RightU, EAX
  1257.         mov  _RightV, EBX
  1258.  
  1259.         mov  EAX, _LeftI
  1260.         mov  EBX, _RightI
  1261.         add  EAX, _LeftDI
  1262.         add  EBX, _RightDI
  1263.         mov  _LeftI, EAX
  1264.         mov  _RightI, EBX
  1265.  
  1266.         dec  ESI
  1267.       jnz  LoopOutTextureGrdHorz
  1268.       jmp  EndLoopOutTextureGrdHorz
  1269.  
  1270.   DrawTextureGrdHorzClip :
  1271.     cld
  1272.     mov  ESI, LoopCount
  1273.     cmp  ESI, 0
  1274.     jle  EndLoopOutTextureGrdHorz
  1275.     adc  EAX, 0        ; Make sure the loop starts with U pipe
  1276.     nop          
  1277.  
  1278.     LoopOutClippedTextureGrdHorz :
  1279.       mov  EBX, _LeftX    ; U
  1280.       mov  EAX, EBX        ; U
  1281.       add  EBX, _LeftDx   ; V
  1282.       sar  EAX, 16         ; U EAX is the Left X
  1283.       mov  _LeftX, EBX    ; V
  1284.  
  1285.       mov  EDX, _RightX   ; U
  1286.       mov  ECX, EDX        ; U
  1287.       add  EDX, _RightDx  ; V
  1288.       sar  ECX, 16         ; U ECX is the Right X
  1289.       mov  _RightX, EDX   ; V
  1290.  
  1291.       mov  EBX, _DestBuffer  ; U
  1292.       mov  EDI, EBX           ; U
  1293.       add  EBX, _AddDest     ; V
  1294.       mov  _DestBuffer, EBX  ; U
  1295.  
  1296.       mov  TempLen, ECX
  1297.       sub  TempLen, EAX
  1298.       inc  TempLen
  1299.       mov  EBX, 0
  1300.  
  1301.         ; Check for Easy reject
  1302.         cmp  EAX, VMaxX      ; Left is greater than MaxX
  1303.         jg   NextRowTextureGrdHorz
  1304.         cmp  ECX, VMinX      ; Right is smaller than MinX
  1305.         jl   NextRowTextureGrdHorz
  1306.  
  1307.         ; Check for Left
  1308.         cmp  EAX, VMinX
  1309.         jge  CheckRightTextureGrdHorz
  1310.           mov  EBX, VMinX
  1311.           sub  EBX, EAX
  1312.           mov  EAX, VMinX    ; Set Left to MinX
  1313.  
  1314.         ; Check for Right
  1315.         CheckRightTextureGrdHorz :
  1316.           cmp  ECX, VMaxX
  1317.           jle  StartTextureGrdHorz
  1318.           mov  ECX, VMaxX    ; Set Right to MaxX
  1319.  
  1320.     StartTextureGrdHorz :
  1321.       sub  ECX, EAX
  1322.       inc  ECX
  1323.       add  EDI, EAX
  1324.  
  1325.       cmp  ECX, 0
  1326.       jle  NextRowTextureGrdHorz
  1327.  
  1328.       mov  EBP, TempLen
  1329.       shl  EBP, 2
  1330.       add  EBP, _DivTable
  1331.       fld  dword ptr [EBP]
  1332.  
  1333.       mov  EBP, ECX      ; EBP is the loop
  1334.  
  1335.       mov  ECX, TempLen
  1336.       mov  TempLen, EBX    ; TempLen is now the skip pixel in x-direction
  1337.  
  1338.       mov  EAX, _LeftI    ; U
  1339.       mov  EDX, _RightI   ; U      
  1340.       sub  EDX, EAX
  1341.       sar  EDX, 8
  1342.       mov  EAX, EDX
  1343.       sar  EDX, 01Fh
  1344.       idiv ECX
  1345.       mov  InDeltaDI, EAX
  1346.  
  1347.       mov  EAX, _LeftU    
  1348.       mov  EDX, _RightU         
  1349.       sub  EDX, EAX
  1350.       sar  EDX, 8
  1351.       mov  InDeltaDu, EDX
  1352.       fild InDeltaDu      
  1353.       fmul st, st(1)
  1354.       fistp InDeltaDu
  1355.       
  1356.       mov  EAX, _LeftV    
  1357.       mov  EDX, _RightV         
  1358.       sub  EDX, EAX
  1359.       sar  EDX, 8
  1360.       mov  InDeltaDv, EDX
  1361.       fild InDeltaDv      
  1362.       fmul st, st(1)
  1363.       fistp InDeltaDv
  1364.  
  1365.       fstp DummyFloat
  1366.  
  1367.       push ESI
  1368.  
  1369.       mov  EAX, InDeltaDu
  1370.       imul TempLen
  1371.       mov  ECX, _LeftU
  1372.       sar  ECX, 8
  1373.       add  ECX, EAX
  1374.  
  1375.       mov  EAX, InDeltaDI
  1376.       imul TempLen
  1377.       mov  ESI, _LeftI
  1378.       sar  ESI, 8
  1379.       add  ESI, EAX
  1380.       
  1381.       mov  EAX, InDeltaDv
  1382.       imul TempLen
  1383.       mov  EDX, _LeftV
  1384.       sar  EDX, 8
  1385.       add  EDX, EAX
  1386.  
  1387.         InLoopClippedTextureGrdHorz :
  1388.           mov  EBX, 0
  1389.           mov  BH, DH
  1390.           mov  BL, CH
  1391.           add  ECX, InDeltaDu
  1392.           add  EBX, _TextureBuffer
  1393.           mov  EAX, ESI
  1394.           mov  AL, [EBX]
  1395.           add  EDX, InDeltaDv
  1396.           add  EAX, _ShadeBuffer
  1397.           mov  BL, [EAX]
  1398.           add  ESI, InDeltaDI
  1399.           mov  [EDI], BL
  1400.           inc  EDI
  1401.           dec  EBP
  1402.           jnz  InLoopClippedTextureGrdHorz
  1403.     
  1404.       pop  ESI
  1405.  
  1406.       NextRowTextureGrdHorz : 
  1407.         mov  EAX, _LeftU
  1408.         mov  EBX, _LeftV
  1409.         add  EAX, _LeftDu
  1410.         add  EBX, _LeftDv
  1411.         mov  _LeftU, EAX
  1412.         mov  _LeftV, EBX
  1413.    
  1414.         mov  EAX, _RightU
  1415.         mov  EBX, _RightV
  1416.         add  EAX, _RightDu
  1417.         add  EBX, _RightDv
  1418.         mov  _RightU, EAX
  1419.         mov  _RightV, EBX
  1420.  
  1421.         mov  EAX, _LeftI
  1422.         mov  EBX, _RightI
  1423.         add  EAX, _LeftDI
  1424.         add  EBX, _RightDI
  1425.         mov  _LeftI, EAX
  1426.         mov  _RightI, EBX
  1427.  
  1428.         dec  ESI
  1429.       jnz  LoopOutClippedTextureGrdHorz
  1430.  
  1431.   EndLoopOutTextureGrdHorz :
  1432.  
  1433.   popad
  1434. } // End asm
  1435. } // End of _DrawTextureGrdHorz
  1436.  
  1437.  
  1438. //***************************************************
  1439. //
  1440. //  Transparent Routines
  1441. //
  1442. //***************************************************
  1443.  
  1444. // VOID _DrawSolidNoTransHorz ( LONG Color, LONG LoopCount, LONG SkipRow, LONG SideClipped )
  1445. //
  1446. // EAX = Color, EDX = LoopCount, EBX = SkipRow, ECX = SideClipped
  1447.  
  1448. VOID _DrawSolidNoTransHorz ( LONG nColor, LONG nLoopCount, 
  1449.                                       LONG SkipRow, LONG SideClipped )
  1450. {
  1451. _asm {
  1452.   pushad
  1453.  
  1454.   mov EAX, nColor
  1455.   mov EDX, nLoopCount
  1456.   mov EBX, SkipRow
  1457.   mov ECX, SideClipped
  1458.  
  1459.   mov  Color, EAX
  1460.  
  1461.   sub  EDX, EBX
  1462.   mov  LoopCount, EDX
  1463.  
  1464.   cmp  EBX, 0
  1465.   je   CheckClippedSolidNoTransHorz 
  1466.  
  1467.     mov  EAX, _LeftDx
  1468.     imul  EBX
  1469.     add  _LeftX, EAX
  1470.  
  1471.     mov  EAX, _RightDx
  1472.     imul  EBX
  1473.     add  _RightX, EAX
  1474.  
  1475.     mov  EAX, _AddDest
  1476.     imul  EBX
  1477.     add  _DestBuffer, EAX
  1478.  
  1479.   CheckClippedSolidNoTransHorz :
  1480.     cmp  ECX, 0
  1481.     jne  DrawSolidNoTransHorzClip
  1482.  
  1483. ;  DrawSolidNoTransHorzNoClip :
  1484.     cld
  1485.     mov  ESI, LoopCount
  1486.     cmp  ESI, 0
  1487.     jle  EndLoopOutSolidNoTransHorz
  1488.     adc  EAX, 0        ; Make sure the loop starts with U pipe
  1489.     nop          
  1490.  
  1491.     LoopOutSolidNoTransHorz :
  1492.       mov  EBX, _LeftX    ; U
  1493.       mov  EAX, EBX        ; U
  1494.       add  EBX, _LeftDx   ; V
  1495.       sar  EAX, 16         ; U EAX is the Left X
  1496.       mov  _LeftX, EBX    ; V
  1497.  
  1498.       mov  EDX, _RightX   ; U
  1499.       mov  ECX, EDX        ; U
  1500.       add  EDX, _RightDx  ; V
  1501.       sar  ECX, 16         ; U ECX is the Right X
  1502.       mov  _RightX, EDX   ; V
  1503.  
  1504.       mov  EBX, _DestBuffer  ; U
  1505.       mov  EDI, EBX           ; U
  1506.       add  EBX, _AddDest     ; V
  1507.       mov  _DestBuffer, EBX  ; U
  1508.  
  1509.       sub  ECX, EAX           ; V
  1510.       add  EDI, EAX           ; U
  1511.       inc  ECX                ; V
  1512.       cmp  ECX, 0
  1513.       jle  NextRowSolidNoTransHorzNoClip 
  1514.  
  1515.       mov  EAX, Color         
  1516.       and  EAX, 0000FF00h
  1517.       mov  EBP, _BlendBuffer
  1518.       
  1519.         InLoopSolidNoTransHorz :
  1520.           mov  AL, [EDI]
  1521.           mov  AL, [EBP+EAX]
  1522.           mov  [EDI], AL
  1523.           inc  EDI
  1524.           loop InLoopSolidNoTransHorz
  1525.           
  1526.       NextRowSolidNoTransHorzNoClip :
  1527.         dec  ESI
  1528.         jnz  LoopOutSolidNoTransHorz
  1529.       jmp  EndLoopOutSolidNoTransHorz
  1530.  
  1531.   DrawSolidNoTransHorzClip :
  1532.     cld
  1533.     mov  ESI, LoopCount
  1534.     cmp  ESI, 0
  1535.     jle  EndLoopOutSolidNoTransHorz
  1536.     adc  EAX, 0        ; Make sure the loop starts with U pipe
  1537.     nop          
  1538.  
  1539.     LoopOutClippedSolidNoTransHorz :
  1540.       mov  EBX, _LeftX    ; U
  1541.       mov  EAX, EBX        ; U
  1542.       add  EBX, _LeftDx   ; V
  1543.       sar  EAX, 16         ; U EAX is the Left X
  1544.       mov  _LeftX, EBX    ; V
  1545.  
  1546.       mov  EDX, _RightX   ; U
  1547.       mov  ECX, EDX        ; U
  1548.       add  EDX, _RightDx  ; V
  1549.       sar  ECX, 16         ; U ECX is the Right X
  1550.       mov  _RightX, EDX   ; V
  1551.  
  1552.       mov  EBX, _DestBuffer  ; U
  1553.       mov  EDI, EBX           ; U
  1554.       add  EBX, _AddDest     ; V
  1555.       mov  _DestBuffer, EBX  ; U
  1556.  
  1557.         ; Check for Easy reject
  1558.         cmp  EAX, VMaxX      ; Left is greater than MaxX
  1559.         jg   NextRowSolidNoTransHorz
  1560.         cmp  ECX, VMinX      ; Right is smaller than MinX
  1561.         jl   NextRowSolidNoTransHorz
  1562.  
  1563.         ; Check for Left
  1564.         cmp  EAX, VMinX
  1565.         jge  CheckRightSolidNoTransHorz
  1566.           mov  EAX, VMinX    ; Set Left to MinX
  1567.  
  1568.         ; Check for Right
  1569.       CheckRightSolidNoTransHorz :
  1570.         cmp  ECX, VMaxX
  1571.         jle  StartSolidNoTransHorz
  1572.         mov  ECX, VMaxX    ; Set Right to MaxX
  1573.  
  1574.     StartSolidNoTransHorz :
  1575.       sub  ECX, EAX
  1576.       inc  ECX
  1577.       cmp  ECX, 0
  1578.       jle  NextRowSolidNoTransHorz
  1579.  
  1580.       add  EDI, EAX           
  1581.  
  1582.       mov  EAX, Color         
  1583.       and  EAX, 0000FF00h
  1584.       mov  EBP, _BlendBuffer
  1585.       
  1586.         InLoopClippedSolidNoTransHorz :
  1587.           mov  AL, [EDI]
  1588.           mov  AL, [EBP+EAX]
  1589.           mov  [EDI], AL
  1590.           inc  EDI
  1591.           loop InLoopClippedSolidNoTransHorz
  1592.           
  1593.       NextRowSolidNoTransHorz : 
  1594.         dec  ESI
  1595.       jnz  LoopOutClippedSolidNoTransHorz
  1596.  
  1597.   EndLoopOutSolidNoTransHorz :
  1598.  
  1599.   popad
  1600. } // End asm
  1601. } // End of _DrawSolidNoTransHorz
  1602.  
  1603.  
  1604. // VOID _DrawSolidGrdTransHorz ( LONG Color, LONG LoopCount, LONG SkipRow, LONG SideClipped )
  1605. //
  1606. // EAX = Color, EDX = LoopCount, EBX = SkipRow, ECX = SideClipped
  1607.  
  1608. VOID _DrawSolidGrdTransHorz ( LONG nColor, LONG nLoopCount, 
  1609.                                       LONG SkipRow, LONG SideClipped )
  1610. {
  1611. _asm {
  1612.   pushad
  1613.  
  1614.   mov EAX, nColor
  1615.   mov EDX, nLoopCount
  1616.   mov EBX, SkipRow
  1617.   mov ECX, SideClipped
  1618.   
  1619.   mov  Color, EAX
  1620.  
  1621.   sub  EDX, EBX
  1622.   mov  LoopCount, EDX
  1623.  
  1624.   cmp  EBX, 0
  1625.   je   CheckClippedSolidGrdTransHorz 
  1626.  
  1627.     mov  EAX, _LeftDx
  1628.     imul  EBX
  1629.     add  _LeftX, EAX
  1630.  
  1631.     mov  EAX, _RightDx
  1632.     imul  EBX
  1633.     add  _RightX, EAX
  1634.  
  1635.     mov  EAX, _LeftDI
  1636.     imul  EBX
  1637.     add  _LeftI, EAX
  1638.  
  1639.     mov  EAX, _RightDI
  1640.     imul  EBX
  1641.     add  _RightI, EAX
  1642.  
  1643.     mov  EAX, _AddDest
  1644.     imul  EBX
  1645.     add  _DestBuffer, EAX
  1646.  
  1647.   CheckClippedSolidGrdTransHorz :
  1648.     cmp  ECX, 0
  1649.     jne  DrawSolidGrdTransHorzClip
  1650.  
  1651. ;  DrawSolidGrdTransHorzNoClip :
  1652.     cld
  1653.     mov  ESI, LoopCount
  1654.     cmp  ESI, 0
  1655.     jle  EndLoopOutSolidGrdTransHorz
  1656.     adc  EAX, 0        ; Make sure the loop starts with U pipe
  1657.     nop          
  1658.  
  1659.     LoopOutSolidGrdTransHorz :
  1660.       mov  EBX, _LeftX    ; U
  1661.       mov  EAX, EBX        ; U
  1662.       add  EBX, _LeftDx   ; V
  1663.       sar  EAX, 16         ; U EAX is the Left X
  1664.       mov  _LeftX, EBX    ; V
  1665.  
  1666.       mov  EDX, _RightX   ; U
  1667.       mov  ECX, EDX        ; U
  1668.       add  EDX, _RightDx  ; V
  1669.       sar  ECX, 16         ; U ECX is the Right X
  1670.       mov  _RightX, EDX   ; V
  1671.  
  1672.       mov  EBX, _DestBuffer  ; U
  1673.       mov  EDI, EBX           ; U
  1674.       add  EBX, _AddDest     ; V
  1675.       sub  ECX, EAX           ; U
  1676.  
  1677.       mov  _DestBuffer, EBX  ; V
  1678.  
  1679.       add  EDI, EAX           ; U
  1680.       inc  ECX                ; V
  1681.       
  1682.       mov  EBX, _LeftI    ; U
  1683.       mov  EAX, EBX        ; U     EAX is the Left I
  1684.       add  EBX, _LeftDI   ; V
  1685.       mov  _LeftI, EBX    ; V
  1686.       
  1687.       mov  EBX, _RightI   ; U
  1688.       mov  EDX, EBX        ; U     EDX is the Right I
  1689.       add  EBX, _RightDI  ; V
  1690.       mov  _RightI, EBX   ; V
  1691.       
  1692.       cmp  ECX, 0
  1693.       jle  NextRowSolidGrdTransHorzNoClip
  1694.  
  1695.       mov  EBX, EAX        ; EBX is the Left I
  1696.       sub  EDX, EAX
  1697.       mov  EAX, EDX
  1698.       sar  EDX, 01Fh
  1699.       idiv ECX
  1700.       mov  InDeltaDI, EAX
  1701.  
  1702.       mov  EBP, EBX
  1703.       mov  EAX, Color        
  1704.       mov  EDX, _BlendBuffer 
  1705.       push ESI
  1706.       mov  ESI, _ShadeBuffer
  1707.       
  1708.         InLoopSolidGrdTransHorz :
  1709.           mov  EBX, EBP
  1710.           shr  EBX, 8
  1711.           mov  BL, AL
  1712.           add  EBP, InDeltaDI
  1713.           mov  BH, [EBX+ESI]
  1714.           mov  BL, [EDI]
  1715.           mov  AH, [EDX+EBX]
  1716.           mov  [EDI], AH
  1717.           inc  EDI
  1718.           loop InLoopSolidGrdTransHorz
  1719.  
  1720.       pop  ESI
  1721.  
  1722.       NextRowSolidGrdTransHorzNoClip :
  1723.         dec  ESI
  1724.         jnz  LoopOutSolidGrdTransHorz
  1725.       jmp  EndLoopOutSolidGrdTransHorz
  1726.  
  1727.   DrawSolidGrdTransHorzClip :
  1728.     cld
  1729.     mov  ESI, LoopCount
  1730.     cmp  ESI, 0
  1731.     jle  EndLoopOutSolidGrdTransHorz
  1732.     adc  EAX, 0        ; Make sure the loop starts with U pipe
  1733.     nop          
  1734.  
  1735.     LoopOutClippedSolidGrdTransHorz :
  1736.       mov  EBX, _LeftX    ; U
  1737.       mov  EAX, EBX        ; U
  1738.       add  EBX, _LeftDx   ; V
  1739.       sar  EAX, 16         ; U EAX is the Left X
  1740.       mov  _LeftX, EBX    ; V
  1741.  
  1742.       mov  EDX, _RightX   ; U
  1743.       mov  ECX, EDX        ; U
  1744.       add  EDX, _RightDx  ; V
  1745.       sar  ECX, 16         ; U ECX is the Right X
  1746.       mov  _RightX, EDX   ; V
  1747.  
  1748.       mov  EBX, _DestBuffer  ; U
  1749.       mov  EDI, EBX           ; U
  1750.       add  EBX, _AddDest     ; V
  1751.       mov  _DestBuffer, EBX  ; U
  1752.  
  1753.       mov  TempLen, ECX
  1754.       sub  TempLen, EAX
  1755.       inc  TempLen
  1756.       mov  EBX, 0
  1757.  
  1758.         ; Check for Easy reject
  1759.         cmp  EAX, VMaxX      ; Left is greater than MaxX
  1760.         jg   NextRowSolidGrdTransHorz
  1761.         cmp  ECX, VMinX      ; Right is smaller than MinX
  1762.         jl   NextRowSolidGrdTransHorz
  1763.  
  1764.         ; Check for Left
  1765.         cmp  EAX, VMinX
  1766.         jge  CheckRightSolidGrdTransHorz
  1767.           mov  EBX, VMinX
  1768.           sub  EBX, EAX
  1769.           mov  EAX, VMinX    ; Set Left to MinX
  1770.  
  1771.         ; Check for Right
  1772.         CheckRightSolidGrdTransHorz :
  1773.           cmp  ECX, VMaxX
  1774.           jle  StartSolidGrdTransHorz
  1775.           mov  ECX, VMaxX    ; Set Right to MaxX
  1776.  
  1777.     StartSolidGrdTransHorz :  ; Clipped
  1778.       sub  ECX, EAX
  1779.       inc  ECX
  1780.  
  1781.       add  EDI, EAX
  1782.  
  1783.       mov  EBP, TempLen    ; EBP is the loop count before clipped
  1784.       mov  TempLen, EBX    ; TempLen is now the skip pixel in x-direction
  1785.  
  1786.       mov  EBX, _LeftI    ; U
  1787.       mov  EAX, EBX        ; U   EAX is the Left I
  1788.       add  EBX, _LeftDI   ; V
  1789.       mov  _LeftI, EBX    ; V
  1790.       
  1791.       mov  EBX, _RightI   ; U
  1792.       mov  EDX, EBX        ; U   EDX is the Right I
  1793.       add  EBX, _RightDI  ; V
  1794.       mov  _RightI, EBX   ; V
  1795.             
  1796.       cmp  ECX, 0
  1797.       jle  NextRowSolidGrdTransHorz
  1798.  
  1799.       mov  EBX, EAX        ; EAX is Left I
  1800.       sub  EDX, EAX
  1801.       mov  EAX, EDX
  1802.       sar  EDX, 01Fh
  1803.       idiv EBP
  1804.       mov  InDeltaDI, EAX
  1805.  
  1806.       ; Add Delta for Skipped pixel
  1807.       mov  EBP, EBX
  1808.       mov  EAX, InDeltaDI
  1809.       imul TempLen 
  1810.       add  EBP, EAX
  1811.  
  1812.       mov  EAX, Color        
  1813.       mov  EDX, _BlendBuffer
  1814.       push ESI
  1815.       mov  ESI, _ShadeBuffer
  1816.       
  1817.         InLoopClippedSolidGrdTransHorz :
  1818.           mov  EBX, EBP
  1819.           shr  EBX, 8
  1820.           mov  BL, AL
  1821.           add  EBP, InDeltaDI
  1822.           mov  BH, [EBX+ESI]
  1823.           mov  BL, [EDI]
  1824.           mov  AH, [EDX+EBX]
  1825.           mov  [EDI], AH
  1826.           inc  EDI
  1827.           loop InLoopClippedSolidGrdTransHorz
  1828.     
  1829.       pop  ESI
  1830.       NextRowSolidGrdTransHorz : 
  1831.         dec  ESI
  1832.       jnz  LoopOutClippedSolidGrdTransHorz
  1833.  
  1834.   EndLoopOutSolidGrdTransHorz :
  1835.  
  1836.   popad
  1837. } // End asm
  1838. } // End of _DrawSolidGrdTransHorz
  1839.  
  1840.  
  1841. // VOID _DrawTextureNoTransHorz ( LONG Color, LONG LoopCount, LONG SkipRow, LONG SideClipped )
  1842. //
  1843. // EAX = Color, EDX = LoopCount, EBX = SkipRow, ECX = SideClipped
  1844.  
  1845. VOID _DrawTextureNoTransHorz ( LONG nColor, LONG nLoopCount, 
  1846.                                       LONG SkipRow, LONG SideClipped )
  1847. {
  1848. _asm {
  1849.   pushad
  1850.  
  1851.   mov EAX, nColor
  1852.   mov EDX, nLoopCount
  1853.   mov EBX, SkipRow
  1854.   mov ECX, SideClipped
  1855.                                                           
  1856.   sub  EDX, EBX
  1857.   mov  LoopCount, EDX
  1858.  
  1859.   cmp  EBX, 0
  1860.   je   CheckClippedTextureNoTransHorz 
  1861.  
  1862.     mov  EAX, _LeftDx
  1863.     imul  EBX
  1864.     add  _LeftX, EAX
  1865.  
  1866.     mov  EAX, _RightDx
  1867.     imul  EBX
  1868.     add  _RightX, EAX
  1869.  
  1870.     mov  EAX, _LeftDu
  1871.     imul  EBX
  1872.     add  _LeftU, EAX
  1873.  
  1874.     mov  EAX, _RightDu
  1875.     imul  EBX
  1876.     add  _RightU, EAX
  1877.  
  1878.     mov  EAX, _LeftDv
  1879.     imul  EBX
  1880.     add  _LeftV, EAX
  1881.  
  1882.     mov  EAX, _RightDv
  1883.     imul  EBX
  1884.     add  _RightV, EAX
  1885.  
  1886.     mov  EAX, _AddDest
  1887.     imul  EBX
  1888.     add  _DestBuffer, EAX
  1889.  
  1890.   CheckClippedTextureNoTransHorz :
  1891.     cmp  ECX, 0
  1892.     jne  DrawTextureNoTransHorzClip
  1893.  
  1894. ;  DrawTextureNoTransHorzNoClip :
  1895.     cld
  1896.     mov  ESI, LoopCount
  1897.     cmp  ESI, 0
  1898.     jle  EndLoopOutTextureNoTransHorz
  1899.     adc  EAX, 0        ; Make sure the loop starts with U pipe
  1900.     nop          
  1901.  
  1902.     LoopOutTextureNoTransHorz :
  1903.       mov  EBX, _LeftX    ; U
  1904.       mov  EAX, EBX        ; U
  1905.       add  EBX, _LeftDx   ; V
  1906.       sar  EAX, 16         ; U EAX is the Left X
  1907.       mov  _LeftX, EBX    ; V
  1908.  
  1909.       mov  EDX, _RightX   ; U
  1910.       mov  ECX, EDX        ; U
  1911.       add  EDX, _RightDx  ; V
  1912.       sar  ECX, 16         ; U ECX is the Right X
  1913.       mov  _RightX, EDX   ; V
  1914.  
  1915.       mov  EBX, _DestBuffer  ; U
  1916.       mov  EDI, EBX           ; U
  1917.       add  EBX, _AddDest     ; V
  1918.       mov  _DestBuffer, EBX  ; U
  1919.  
  1920.       sub  ECX, EAX           ; V
  1921.       add  EDI, EAX           ; U
  1922.       inc  ECX                ; V
  1923.             
  1924.       cmp  ECX, 0
  1925.       jle  NextRowTextureNoTransHorzNoClip
  1926.  
  1927.       mov  EBP, ECX
  1928.       shl  EBP, 2
  1929.       add  EBP, _DivTable
  1930.       fld  dword ptr [EBP] 
  1931.       
  1932.       mov  EBP, ECX      ; EBP is the loop
  1933.  
  1934.       mov  EAX, _LeftU    
  1935.       mov  EDX, _RightU         
  1936.       sub  EDX, EAX
  1937.       sar  EDX, 8
  1938.       mov  InDeltaDu, EDX
  1939.       fild InDeltaDu      
  1940.       fmul st, st(1)
  1941.       fistp InDeltaDu
  1942.       
  1943.       mov  EAX, _LeftV    
  1944.       mov  EDX, _RightV         
  1945.       sub  EDX, EAX
  1946.       sar  EDX, 8
  1947.       mov  InDeltaDv, EDX
  1948.       fild InDeltaDv      
  1949.       fmul st, st(1)
  1950.       fistp InDeltaDv
  1951.  
  1952.       fstp DummyFloat
  1953.  
  1954.       push ESI
  1955.  
  1956.       mov  ECX, _LeftU
  1957.       sar  ECX, 8
  1958.       mov  EDX, _LeftV
  1959.       sar  EDX, 8
  1960.       mov  ESI, _TextureBuffer
  1961.       mov  EBX, 0
  1962.       mov  EAX, 0
  1963.       mov  InLoopCount, BP
  1964.       mov  EBP, _BlendBuffer
  1965.  
  1966.         InLoopTextureNoTransHorz :
  1967.           mov  BH, DH
  1968.           mov  BL, CH
  1969.           add  ECX, InDeltaDu
  1970.           mov  AL, [EDI]
  1971.           mov  AH, [EBX+ESI]
  1972.           add  EDX, InDeltaDv
  1973.           mov  AL, [EBP+EAX]
  1974.           mov  [EDI], AL
  1975.           inc  EDI
  1976.           dec  InLoopCount
  1977.           jnz  InLoopTextureNoTransHorz
  1978.  
  1979.       pop  ESI
  1980.  
  1981.       NextRowTextureNoTransHorzNoClip :
  1982.  
  1983.       mov  EAX, _LeftU
  1984.       mov  EBX, _LeftV
  1985.       add  EAX, _LeftDu
  1986.       add  EBX, _LeftDv
  1987.       mov  _LeftU, EAX
  1988.       mov  _LeftV, EBX
  1989.  
  1990.       mov  EAX, _RightU
  1991.       mov  EBX, _RightV
  1992.       add  EAX, _RightDu
  1993.       add  EBX, _RightDv
  1994.       mov  _RightU, EAX
  1995.       mov  _RightV, EBX
  1996.  
  1997.       dec  ESI
  1998.       jnz  LoopOutTextureNoTransHorz
  1999.       jmp  EndLoopOutTextureNoTransHorz
  2000.  
  2001.   DrawTextureNoTransHorzClip :
  2002.     cld
  2003.     mov  ESI, LoopCount
  2004.     cmp  ESI, 0
  2005.     jle  EndLoopOutTextureNoTransHorz
  2006.     adc  EAX, 0        ; Make sure the loop starts with U pipe
  2007.     nop          
  2008.  
  2009.     LoopOutClippedTextureNoTransHorz :
  2010.       mov  EBX, _LeftX    ; U
  2011.       mov  EAX, EBX        ; U
  2012.       add  EBX, _LeftDx   ; V
  2013.       sar  EAX, 16         ; U EAX is the Left X
  2014.       mov  _LeftX, EBX    ; V
  2015.  
  2016.       mov  EDX, _RightX   ; U
  2017.       mov  ECX, EDX        ; U
  2018.       add  EDX, _RightDx  ; V
  2019.       sar  ECX, 16         ; U ECX is the Right X
  2020.       mov  _RightX, EDX   ; V
  2021.  
  2022.       mov  EBX, _DestBuffer  ; U
  2023.       mov  EDI, EBX           ; U
  2024.       add  EBX, _AddDest     ; V
  2025.       mov  _DestBuffer, EBX  ; U
  2026.  
  2027.       mov  TempLen, ECX
  2028.       sub  TempLen, EAX
  2029.       inc  TempLen
  2030.       mov  EBX, 0
  2031.  
  2032.         ; Check for Easy reject
  2033.         cmp  EAX, VMaxX      ; Left is greater than MaxX
  2034.         jg   NextRowTextureNoTransHorz
  2035.         cmp  ECX, VMinX      ; Right is smaller than MinX
  2036.         jl   NextRowTextureNoTransHorz
  2037.  
  2038.         ; Check for Left
  2039.         cmp  EAX, VMinX
  2040.         jge  CheckRightTextureNoTransHorz
  2041.           mov  EBX, VMinX
  2042.           sub  EBX, EAX
  2043.           mov  EAX, VMinX    ; Set Left to MinX
  2044.  
  2045.         ; Check for Right
  2046.       CheckRightTextureNoTransHorz :
  2047.         cmp  ECX, VMaxX
  2048.         jle  StartTextureNoTransHorz
  2049.         mov  ECX, VMaxX    ; Set Right to MaxX
  2050.  
  2051.     StartTextureNoTransHorz :
  2052.       sub  ECX, EAX
  2053.       inc  ECX
  2054.  
  2055.       cmp  ECX, 0
  2056.       jle  NextRowTextureNoTransHorz
  2057.  
  2058.       add  EDI, EAX
  2059.  
  2060.       mov  EBP, TempLen
  2061.       shl  EBP, 2
  2062.       add  EBP, _DivTable
  2063.       fld  dword ptr [EBP]
  2064.       
  2065.       mov  EBP, ECX      ; EBP is the loop
  2066.       mov  TempLen, EBX
  2067.  
  2068.       mov  EAX, _LeftU
  2069.       mov  EDX, _RightU         
  2070.       sub  EDX, EAX
  2071.       sar  EDX, 8
  2072.       mov  InDeltaDu, EDX
  2073.       fild InDeltaDu      
  2074.       fmul st, st(1)
  2075.       fistp InDeltaDu
  2076.       
  2077.       mov  EAX, _LeftV    
  2078.       mov  EDX, _RightV         
  2079.       sub  EDX, EAX
  2080.       sar  EDX, 8
  2081.       mov  InDeltaDv, EDX
  2082.       fild InDeltaDv      
  2083.       fmul st, st(1)
  2084.       fistp InDeltaDv
  2085.  
  2086.       fstp  DummyFloat
  2087.  
  2088.       push ESI
  2089.  
  2090.       mov  EAX, InDeltaDu
  2091.       imul TempLen
  2092.       mov  ECX, _LeftU
  2093.       sar  ECX, 8
  2094.       add  ECX, EAX
  2095.  
  2096.       mov  EAX, InDeltaDv
  2097.       imul TempLen
  2098.       mov  EDX, _LeftV
  2099.       sar  EDX, 8
  2100.       add  EDX, EAX
  2101.  
  2102.       mov  ESI, _TextureBuffer
  2103.       mov  EBX, 0
  2104.       mov  EAX, 0
  2105.       mov  InLoopCount, BP
  2106.       mov  EBP, _BlendBuffer
  2107.  
  2108.         InLoopClippedTextureNoTransHorz :
  2109.           mov  BH, DH
  2110.           mov  BL, CH
  2111.           add  ECX, InDeltaDu
  2112.           mov  AL, [EDI]
  2113.           mov  AH, [EBX+ESI]
  2114.           add  EDX, InDeltaDv
  2115.           mov  AL, [EBP+EAX]
  2116.           mov  [EDI], AL
  2117.           inc  EDI
  2118.           dec  InLoopCount
  2119.           jnz  InLoopClippedTextureNoTransHorz
  2120.  
  2121.       pop  ESI
  2122.  
  2123.       NextRowTextureNoTransHorz : 
  2124.         mov  EAX, _LeftU
  2125.         mov  EBX, _LeftV
  2126.         add  EAX, _LeftDu
  2127.         add  EBX, _LeftDv
  2128.         mov  _LeftU, EAX
  2129.         mov  _LeftV, EBX
  2130.  
  2131.         mov  EAX, _RightU
  2132.         mov  EBX, _RightV
  2133.         add  EAX, _RightDu
  2134.         add  EBX, _RightDv
  2135.         mov  _RightU, EAX
  2136.         mov  _RightV, EBX
  2137.  
  2138.         dec  ESI
  2139.       jnz  LoopOutClippedTextureNoTransHorz
  2140.  
  2141.   EndLoopOutTextureNoTransHorz :
  2142.  
  2143.   popad
  2144. } // End asm
  2145. } // End of _DrawTextureNoTransHorz
  2146.  
  2147.  
  2148. // VOID _DrawTextureFlatTransHorz ( LONG Color, LONG LoopCount, LONG SkipRow, LONG SideClipped )
  2149. //
  2150. // EAX = Color, EDX = LoopCount, EBX = SkipRow, ECX = SideClipped
  2151.  
  2152. VOID _DrawTextureFlatTransHorz ( LONG nColor, LONG nLoopCount, 
  2153.                                       LONG SkipRow, LONG SideClipped )
  2154. {
  2155. _asm {
  2156.   pushad
  2157.  
  2158.   mov EAX, nColor
  2159.   mov EDX, nLoopCount
  2160.   mov EBX, SkipRow
  2161.   mov ECX, SideClipped
  2162.     
  2163.   sub  EDX, EBX
  2164.   mov  LoopCount, EDX
  2165.  
  2166.   cmp  EBX, 0
  2167.   je   CheckClippedTextureFlatTransHorz 
  2168.  
  2169.     mov  EAX, _LeftDx
  2170.     imul  EBX
  2171.     add  _LeftX, EAX
  2172.  
  2173.     mov  EAX, _RightDx
  2174.     imul  EBX
  2175.     add  _RightX, EAX
  2176.  
  2177.     mov  EAX, _LeftDu
  2178.     imul  EBX
  2179.     add  _LeftU, EAX
  2180.  
  2181.     mov  EAX, _RightDu
  2182.     imul  EBX
  2183.     add  _RightU, EAX
  2184.  
  2185.     mov  EAX, _LeftDv
  2186.     imul  EBX
  2187.     add  _LeftV, EAX
  2188.  
  2189.     mov  EAX, _RightDv
  2190.     imul  EBX
  2191.     add  _RightV, EAX
  2192.  
  2193.     mov  EAX, _AddDest
  2194.     imul  EBX
  2195.     add  _DestBuffer, EAX
  2196.  
  2197.   CheckClippedTextureFlatTransHorz :
  2198.     cmp  ECX, 0
  2199.     jne  DrawTextureFlatTransHorzClip
  2200.  
  2201. ;  DrawTextureFlatTransHorzNoClip :
  2202.     cld
  2203.     mov  ESI, LoopCount
  2204.     cmp  ESI, 0
  2205.     jle  EndLoopOutTextureFlatTransHorz
  2206.     adc  EAX, 0        ; Make sure the loop starts with U pipe
  2207.     nop          
  2208.  
  2209.     LoopOutTextureFlatTransHorz :
  2210.       mov  EBX, _LeftX    ; U
  2211.       mov  EAX, EBX        ; U
  2212.       add  EBX, _LeftDx   ; V
  2213.       sar  EAX, 16         ; U EAX is the Left X
  2214.       mov  _LeftX, EBX    ; V
  2215.  
  2216.       mov  EDX, _RightX   ; U
  2217.       mov  ECX, EDX        ; U
  2218.       add  EDX, _RightDx  ; V
  2219.       sar  ECX, 16         ; U ECX is the Right X
  2220.       mov  _RightX, EDX   ; V
  2221.  
  2222.       mov  EBX, _DestBuffer  ; U
  2223.       mov  EDI, EBX           ; U
  2224.       add  EBX, _AddDest     ; V
  2225.       sub  ECX, EAX           ; U
  2226.  
  2227.       mov  _DestBuffer, EBX  ; V
  2228.  
  2229.       add  EDI, EAX           ; U
  2230.       inc  ECX                ; V
  2231.  
  2232.       cmp  ECX, 0
  2233.       jle  NextRowTextureFlatTransHorzNoClip
  2234.  
  2235.       mov  EBP, ECX
  2236.       shl  EBP, 2
  2237.       add  EBP, _DivTable
  2238.       fld  dword ptr [EBP]
  2239.       
  2240.       mov  EBP, ECX      ; EBP is the loop
  2241.  
  2242.       mov  EAX, _LeftU    
  2243.       mov  EDX, _RightU         
  2244.       sub  EDX, EAX
  2245.       sar  EDX, 8
  2246.       mov  InDeltaDu, EDX
  2247.       fild InDeltaDu      
  2248.       fmul st, st(1)
  2249.       fistp InDeltaDu
  2250.       
  2251.       mov  EAX, _LeftV    
  2252.       mov  EDX, _RightV         
  2253.       sub  EDX, EAX
  2254.       sar  EDX, 8
  2255.       mov  InDeltaDv, EDX
  2256.       fild InDeltaDv      
  2257.       fmul st, st(1)
  2258.       fistp InDeltaDv
  2259.  
  2260.       fstp DummyFloat
  2261.  
  2262.       push ESI
  2263.  
  2264.       mov  ECX, _LeftU
  2265.       mov  EDX, _LeftV
  2266.       sar  ECX, 8
  2267.       sar  EDX, 8
  2268.  
  2269.       mov  EAX, _LeftI
  2270.       sar  EAX, 8
  2271.       mov  ESI, _ShadeBuffer
  2272.       mov  InLoopCount, BP
  2273.       mov  EBP, _BlendBuffer
  2274.       
  2275.         InLoopTextureFlatTransHorz :
  2276.           mov  EBX, 0
  2277.           mov  BH, DH
  2278.           mov  BL, CH
  2279.           add  ECX, InDeltaDu
  2280.           add  EBX, _TextureBuffer
  2281.           mov  AL, [EBX]
  2282.           add  EDX, InDeltaDv
  2283.           mov  BL, [EDI]
  2284.           mov  BH, [ESI+EAX]
  2285.           and  EBX, 0FFFFh
  2286.           mov  AL, [EBP+EBX]
  2287.           mov  [EDI], AL
  2288.           inc  EDI
  2289.           dec  InLoopCount
  2290.           jnz  InLoopTextureFlatTransHorz
  2291.     
  2292.       pop  ESI
  2293.  
  2294.       NextRowTextureFlatTransHorzNoClip : 
  2295.         mov  EAX, _LeftU
  2296.         mov  EBX, _LeftV
  2297.         add  EAX, _LeftDu
  2298.         add  EBX, _LeftDv
  2299.         mov  _LeftU, EAX
  2300.         mov  _LeftV, EBX
  2301.  
  2302.         mov  EAX, _RightU
  2303.         mov  EBX, _RightV
  2304.         add  EAX, _RightDu
  2305.         add  EBX, _RightDv
  2306.         mov  _RightU, EAX
  2307.         mov  _RightV, EBX
  2308.  
  2309.         dec  ESI
  2310.       jnz  LoopOutTextureFlatTransHorz
  2311.       jmp  EndLoopOutTextureFlatTransHorz
  2312.  
  2313.   DrawTextureFlatTransHorzClip :
  2314.     cld
  2315.     mov  ESI, LoopCount
  2316.     cmp  ESI, 0
  2317.     jle  EndLoopOutTextureFlatTransHorz
  2318.     adc  EAX, 0        ; Make sure the loop starts with U pipe
  2319.     nop          
  2320.  
  2321.     LoopOutClippedTextureFlatTransHorz :
  2322.       mov  EBX, _LeftX    ; U
  2323.       mov  EAX, EBX        ; U
  2324.       add  EBX, _LeftDx   ; V
  2325.       sar  EAX, 16         ; U EAX is the Left X
  2326.       mov  _LeftX, EBX    ; V
  2327.  
  2328.       mov  EDX, _RightX   ; U
  2329.       mov  ECX, EDX        ; U
  2330.       add  EDX, _RightDx  ; V
  2331.       sar  ECX, 16         ; U ECX is the Right X
  2332.       mov  _RightX, EDX   ; V
  2333.  
  2334.       mov  EBX, _DestBuffer  ; U
  2335.       mov  EDI, EBX           ; U
  2336.       add  EBX, _AddDest     ; V
  2337.       mov  _DestBuffer, EBX  ; U
  2338.  
  2339.       mov  TempLen, ECX
  2340.       sub  TempLen, EAX
  2341.       inc  TempLen
  2342.       mov  EBX, 0
  2343.  
  2344.         ; Check for Easy reject
  2345.         cmp  EAX, VMaxX      ; Left is greater than MaxX
  2346.         jg   NextRowTextureFlatTransHorz
  2347.         cmp  ECX, VMinX      ; Right is smaller than MinX
  2348.         jl   NextRowTextureFlatTransHorz
  2349.  
  2350.         ; Check for Left
  2351.         cmp  EAX, VMinX
  2352.         jge  CheckRightTextureFlatTransHorz
  2353.           mov  EBX, VMinX
  2354.           sub  EBX, EAX
  2355.           mov  EAX, VMinX    ; Set Left to MinX
  2356.  
  2357.         ; Check for Right
  2358.         CheckRightTextureFlatTransHorz :
  2359.           cmp  ECX, VMaxX
  2360.           jle  StartTextureFlatTransHorz
  2361.           mov  ECX, VMaxX    ; Set Right to MaxX
  2362.  
  2363.     StartTextureFlatTransHorz :
  2364.       sub  ECX, EAX
  2365.       inc  ECX
  2366.       add  EDI, EAX
  2367.  
  2368.       cmp  ECX, 0
  2369.       jle  NextRowTextureFlatTransHorz
  2370.  
  2371.       mov  EBP, TempLen
  2372.       shl  EBP, 2
  2373.       add  EBP, _DivTable
  2374.       fld  dword ptr [EBP]
  2375.  
  2376.       mov  EBP, ECX      ; EBP is the loop
  2377.  
  2378.       mov  ECX, TempLen
  2379.       mov  TempLen, EBX    ; TempLen is now the skip pixel in x-direction
  2380.  
  2381.       mov  EAX, _LeftU    
  2382.       mov  EDX, _RightU         
  2383.       sub  EDX, EAX
  2384.       sar  EDX, 8
  2385.       mov  InDeltaDu, EDX
  2386.       fild InDeltaDu      
  2387.       fmul st, st(1)
  2388.       fistp InDeltaDu
  2389.       
  2390.       mov  EAX, _LeftV    
  2391.       mov  EDX, _RightV         
  2392.       sub  EDX, EAX
  2393.       sar  EDX, 8
  2394.       mov  InDeltaDv, EDX
  2395.       fild InDeltaDv      
  2396.       fmul st, st(1)
  2397.       fistp InDeltaDv
  2398.  
  2399.       fstp DummyFloat
  2400.  
  2401.       push ESI
  2402.  
  2403.       mov  EAX, InDeltaDu
  2404.       imul TempLen
  2405.       mov  ECX, _LeftU
  2406.       sar  ECX, 8
  2407.       add  ECX, EAX
  2408.  
  2409.       mov  EAX, InDeltaDv
  2410.       imul TempLen
  2411.       mov  EDX, _LeftV
  2412.       sar  EDX, 8
  2413.       add  EDX, EAX
  2414.  
  2415.       mov  EAX, _LeftI
  2416.       sar  EAX, 8
  2417.       mov  ESI, _ShadeBuffer
  2418.       mov  InLoopCount, BP
  2419.       mov  EBP, _BlendBuffer
  2420.       
  2421.         InLoopClippedTextureFlatTransHorz :
  2422.           mov  EBX, 0
  2423.           mov  BH, DH
  2424.           mov  BL, CH
  2425.           add  ECX, InDeltaDu
  2426.           add  EBX, _TextureBuffer
  2427.           mov  AL, [EBX]
  2428.           add  EDX, InDeltaDv
  2429.           mov  BL, [EDI]
  2430.           mov  BH, [ESI+EAX]
  2431.           and  EBX, 0FFFFh
  2432.           mov  AL, [EBP+EBX]
  2433.           mov  [EDI], AL
  2434.           inc  EDI
  2435.           dec  InLoopCount
  2436.           jnz  InLoopClippedTextureFlatTransHorz
  2437.     
  2438.       pop  ESI
  2439.  
  2440.       NextRowTextureFlatTransHorz : 
  2441.         mov  EAX, _LeftU
  2442.         mov  EBX, _LeftV
  2443.         add  EAX, _LeftDu
  2444.         add  EBX, _LeftDv
  2445.         mov  _LeftU, EAX
  2446.         mov  _LeftV, EBX
  2447.  
  2448.         mov  EAX, _RightU
  2449.         mov  EBX, _RightV
  2450.         add  EAX, _RightDu
  2451.         add  EBX, _RightDv
  2452.         mov  _RightU, EAX
  2453.         mov  _RightV, EBX
  2454.  
  2455.         dec  ESI
  2456.       jnz  LoopOutClippedTextureFlatTransHorz
  2457.  
  2458.   EndLoopOutTextureFlatTransHorz :
  2459.  
  2460.   popad
  2461. } // End asm
  2462. } // End of _DrawTextureFlatTransHorz
  2463.  
  2464.  
  2465. // VOID _DrawTextureGrdTransHorz ( LONG Color, LONG LoopCount, LONG SkipRow, LONG SideClipped )
  2466. //
  2467. // EAX = Color, EDX = LoopCount, EBX = SkipRow, ECX = SideClipped
  2468.  
  2469. VOID _DrawTextureGrdTransHorz ( LONG nColor, LONG nLoopCount, 
  2470.                                       LONG SkipRow, LONG SideClipped )  
  2471. {
  2472. _asm {
  2473.   pushad
  2474.  
  2475.   mov EAX, nColor
  2476.   mov EDX, nLoopCount
  2477.   mov EBX, SkipRow
  2478.   mov ECX, SideClipped
  2479.   
  2480.   mov  Color, EAX
  2481.  
  2482.   sub  EDX, EBX
  2483.   mov  LoopCount, EDX
  2484.  
  2485.   cmp  EBX, 0
  2486.   je   CheckClippedTextureGrdTransHorz 
  2487.  
  2488.     mov  EAX, _LeftDx
  2489.     imul  EBX
  2490.     add  _LeftX, EAX
  2491.  
  2492.     mov  EAX, _RightDx
  2493.     imul  EBX
  2494.     add  _RightX, EAX
  2495.  
  2496.     mov  EAX, _LeftDu
  2497.     imul  EBX
  2498.     add  _LeftU, EAX
  2499.  
  2500.     mov  EAX, _RightDu
  2501.     imul  EBX
  2502.     add  _RightU, EAX
  2503.  
  2504.     mov  EAX, _LeftDv
  2505.     imul  EBX
  2506.     add  _LeftV, EAX
  2507.  
  2508.     mov  EAX, _RightDv
  2509.     imul  EBX
  2510.     add  _RightV, EAX
  2511.  
  2512.     mov  EAX, _LeftDI
  2513.     imul  EBX
  2514.     add  _LeftI, EAX
  2515.  
  2516.     mov  EAX, _RightDI
  2517.     imul  EBX
  2518.     add  _RightI, EAX
  2519.  
  2520.     mov  EAX, _AddDest
  2521.     imul  EBX
  2522.     add  _DestBuffer, EAX
  2523.  
  2524.   CheckClippedTextureGrdTransHorz :
  2525.     cmp  ECX, 0
  2526.     jne  DrawTextureGrdTransHorzClip
  2527.  
  2528. ;  DrawTextureGrdTransHorzNoClip :
  2529.     cld
  2530.     mov  ESI, LoopCount
  2531.     cmp  ESI, 0
  2532.     jle  EndLoopOutTextureGrdTransHorz
  2533.     adc  EAX, 0        ; Make sure the loop starts with U pipe
  2534.     nop          
  2535.  
  2536.     LoopOutTextureGrdTransHorz :
  2537.       mov  EBX, _LeftX    ; U
  2538.       mov  EAX, EBX        ; U
  2539.       add  EBX, _LeftDx   ; V
  2540.       sar  EAX, 16         ; U EAX is the Left X
  2541.       mov  _LeftX, EBX    ; V
  2542.  
  2543.       mov  EDX, _RightX   ; U
  2544.       mov  ECX, EDX        ; U
  2545.       add  EDX, _RightDx  ; V
  2546.       sar  ECX, 16         ; U ECX is the Right X
  2547.       mov  _RightX, EDX   ; V
  2548.  
  2549.       mov  EBX, _DestBuffer  ; U
  2550.       mov  EDI, EBX           ; U
  2551.       add  EBX, _AddDest     ; V
  2552.       sub  ECX, EAX           ; U
  2553.  
  2554.       mov  _DestBuffer, EBX  ; V
  2555.  
  2556.       add  EDI, EAX           ; U
  2557.       inc  ECX                ; V
  2558.  
  2559.       cmp  ECX, 0
  2560.       jle  NextRowTextureGrdTransHorzNoClip
  2561.  
  2562.       mov  EBP, ECX
  2563.       shl  EBP, 2
  2564.       add  EBP, _DivTable
  2565.       fld  dword ptr [EBP]
  2566.       
  2567.       mov  EBP, ECX      ; EBP is the loop
  2568.  
  2569.       mov  EAX, _LeftI    ; U
  2570.       mov  EDX, _RightI   ; U      
  2571.       sub  EDX, EAX
  2572.       sar  EDX, 8
  2573.       mov  EAX, EDX
  2574.       sar  EDX, 01Fh
  2575.       idiv ECX
  2576.       mov  InDeltaDI, EAX
  2577.  
  2578.       mov  EAX, _LeftU
  2579.       mov  EDX, _RightU         
  2580.       sub  EDX, EAX
  2581.       sar  EDX, 8
  2582.       mov  InDeltaDu, EDX
  2583.       fild InDeltaDu      
  2584.       fmul st, st(1)
  2585.       fistp InDeltaDu
  2586.       
  2587.       mov  EAX, _LeftV    
  2588.       mov  EDX, _RightV         
  2589.       sub  EDX, EAX
  2590.       sar  EDX, 8
  2591.       mov  InDeltaDv, EDX
  2592.       fild InDeltaDv      
  2593.       fmul st, st(1)
  2594.       fistp InDeltaDv
  2595.  
  2596.       fstp DummyFloat
  2597.  
  2598.       push ESI
  2599.  
  2600.       mov  ECX, _LeftU
  2601.       mov  EDX, _LeftV
  2602.       mov  ESI, _LeftI
  2603.       sar  ECX, 8
  2604.       sar  EDX, 8
  2605.       sar  ESI, 8
  2606.       mov  InLoopCount, BP
  2607.       mov  EBP, _BlendBuffer
  2608.      
  2609.         InLoopTextureGrdTransHorz :
  2610.           mov  EBX, 0
  2611.           mov  BH, DH
  2612.           mov  BL, CH
  2613.           add  ECX, InDeltaDu
  2614.           add  EBX, _TextureBuffer
  2615.           mov  EAX, ESI
  2616.           mov  AL, [EBX]
  2617.           add  EDX, InDeltaDv
  2618.           add  EAX, _ShadeBuffer
  2619.           mov  BL, [EDI]
  2620.           mov  BH, [EAX]
  2621.           and  EBX, 0FFFFh
  2622.           add  ESI, InDeltaDI
  2623.           mov  AL, [EBP+EBX]
  2624.           mov  [EDI], AL
  2625.           inc  EDI
  2626.           dec  InLoopCount
  2627.           jnz  InLoopTextureGrdTransHorz
  2628.    
  2629.       pop  ESI
  2630.  
  2631.       NextRowTextureGrdTransHorzNoClip :
  2632.         mov  EAX, _LeftU
  2633.         mov  EBX, _LeftV
  2634.         add  EAX, _LeftDu
  2635.         add  EBX, _LeftDv
  2636.         mov  _LeftU, EAX
  2637.         mov  _LeftV, EBX
  2638.  
  2639.         mov  EAX, _RightU
  2640.         mov  EBX, _RightV
  2641.         add  EAX, _RightDu
  2642.         add  EBX, _RightDv
  2643.         mov  _RightU, EAX
  2644.         mov  _RightV, EBX
  2645.  
  2646.         mov  EAX, _LeftI
  2647.         mov  EBX, _RightI
  2648.         add  EAX, _LeftDI
  2649.         add  EBX, _RightDI
  2650.         mov  _LeftI, EAX
  2651.         mov  _RightI, EBX
  2652.  
  2653.         dec  ESI
  2654.       jnz  LoopOutTextureGrdTransHorz
  2655.       jmp  EndLoopOutTextureGrdTransHorz
  2656.  
  2657.   DrawTextureGrdTransHorzClip :
  2658.     cld
  2659.     mov  ESI, LoopCount
  2660.     cmp  ESI, 0
  2661.     jle  EndLoopOutTextureGrdTransHorz
  2662.     adc  EAX, 0        ; Make sure the loop starts with U pipe
  2663.     nop          
  2664.  
  2665.     LoopOutClippedTextureGrdTransHorz :
  2666.       mov  EBX, _LeftX    ; U
  2667.       mov  EAX, EBX        ; U
  2668.       add  EBX, _LeftDx   ; V
  2669.       sar  EAX, 16         ; U EAX is the Left X
  2670.       mov  _LeftX, EBX    ; V
  2671.  
  2672.       mov  EDX, _RightX   ; U
  2673.       mov  ECX, EDX        ; U
  2674.       add  EDX, _RightDx  ; V
  2675.       sar  ECX, 16         ; U ECX is the Right X
  2676.       mov  _RightX, EDX   ; V
  2677.  
  2678.       mov  EBX, _DestBuffer  ; U
  2679.       mov  EDI, EBX           ; U
  2680.       add  EBX, _AddDest     ; V
  2681.       mov  _DestBuffer, EBX  ; U
  2682.  
  2683.       mov  TempLen, ECX
  2684.       sub  TempLen, EAX
  2685.       inc  TempLen
  2686.       mov  EBX, 0
  2687.  
  2688.         ; Check for Easy reject
  2689.         cmp  EAX, VMaxX      ; Left is greater than MaxX
  2690.         jg   NextRowTextureGrdTransHorz
  2691.         cmp  ECX, VMinX      ; Right is smaller than MinX
  2692.         jl   NextRowTextureGrdTransHorz
  2693.  
  2694.         ; Check for Left
  2695.         cmp  EAX, VMinX
  2696.         jge  CheckRightTextureGrdTransHorz
  2697.           mov  EBX, VMinX
  2698.           sub  EBX, EAX
  2699.           mov  EAX, VMinX    ; Set Left to MinX
  2700.  
  2701.         ; Check for Right
  2702.         CheckRightTextureGrdTransHorz :
  2703.           cmp  ECX, VMaxX
  2704.           jle  StartTextureGrdTransHorz
  2705.           mov  ECX, VMaxX    ; Set Right to MaxX
  2706.  
  2707.     StartTextureGrdTransHorz :
  2708.       sub  ECX, EAX
  2709.       inc  ECX
  2710.       add  EDI, EAX
  2711.  
  2712.       cmp  ECX, 0
  2713.       jle  NextRowTextureGrdTransHorz
  2714.  
  2715.       mov  EBP, TempLen
  2716.       shl  EBP, 2
  2717.       add  EBP, _DivTable
  2718.       fld  dword ptr [EBP]
  2719.  
  2720.       mov  EBP, ECX      ; EBP is the loop
  2721.  
  2722.       mov  ECX, TempLen
  2723.       mov  TempLen, EBX    ; TempLen is now the skip pixel in x-direction
  2724.  
  2725.       mov  EAX, _LeftI    ; U
  2726.       mov  EDX, _RightI   ; U      
  2727.       sub  EDX, EAX
  2728.       sar  EDX, 8
  2729.       mov  EAX, EDX
  2730.       sar  EDX, 01Fh
  2731.       idiv ECX
  2732.       mov  InDeltaDI, EAX
  2733.  
  2734.       mov  EAX, _LeftU    
  2735.       mov  EDX, _RightU         
  2736.       sub  EDX, EAX
  2737.       sar  EDX, 8
  2738.       mov  InDeltaDu, EDX
  2739.       fild InDeltaDu      
  2740.       fmul st, st(1)
  2741.       fistp InDeltaDu
  2742.       
  2743.       mov  EAX, _LeftV    
  2744.       mov  EDX, _RightV         
  2745.       sub  EDX, EAX
  2746.       sar  EDX, 8
  2747.       mov  InDeltaDv, EDX
  2748.       fild InDeltaDv      
  2749.       fmul st, st(1)
  2750.       fistp InDeltaDv
  2751.  
  2752.       fstp DummyFloat
  2753.  
  2754.       push ESI
  2755.  
  2756.       mov  EAX, InDeltaDu
  2757.       imul TempLen
  2758.       mov  ECX, _LeftU
  2759.       sar  ECX, 8
  2760.       add  ECX, EAX
  2761.  
  2762.       mov  EAX, InDeltaDI
  2763.       imul TempLen
  2764.       mov  ESI, _LeftI
  2765.       sar  ESI, 8
  2766.       add  ESI, EAX
  2767.       
  2768.       mov  EAX, InDeltaDv
  2769.       imul TempLen
  2770.       mov  EDX, _LeftV
  2771.       sar  EDX, 8
  2772.       add  EDX, EAX
  2773.       mov  InLoopCount, BP
  2774.       mov  EBP, _BlendBuffer
  2775.  
  2776.         InLoopClippedTextureGrdTransHorz :
  2777.           mov  EBX, 0
  2778.           mov  BH, DH
  2779.           mov  BL, CH
  2780.           add  ECX, InDeltaDu
  2781.           add  EBX, _TextureBuffer
  2782.           mov  EAX, ESI
  2783.           mov  AL, [EBX]
  2784.           add  EDX, InDeltaDv
  2785.           add  EAX, _ShadeBuffer
  2786.           mov  BL, [EDI]
  2787.           mov  BH, [EAX]
  2788.           and  EBX, 0FFFFh
  2789.           add  ESI, InDeltaDI
  2790.           mov  AL, [EBP+EBX]
  2791.           mov  [EDI], AL
  2792.           inc  EDI
  2793.           dec  InLoopCount
  2794.           jnz  InLoopClippedTextureGrdTransHorz
  2795.     
  2796.       pop  ESI
  2797.  
  2798.       NextRowTextureGrdTransHorz : 
  2799.         mov  EAX, _LeftU
  2800.         mov  EBX, _LeftV
  2801.         add  EAX, _LeftDu
  2802.         add  EBX, _LeftDv
  2803.         mov  _LeftU, EAX
  2804.         mov  _LeftV, EBX
  2805.    
  2806.         mov  EAX, _RightU
  2807.         mov  EBX, _RightV
  2808.         add  EAX, _RightDu
  2809.         add  EBX, _RightDv
  2810.         mov  _RightU, EAX
  2811.         mov  _RightV, EBX
  2812.  
  2813.         mov  EAX, _LeftI
  2814.         mov  EBX, _RightI
  2815.         add  EAX, _LeftDI
  2816.         add  EBX, _RightDI
  2817.         mov  _LeftI, EAX
  2818.         mov  _RightI, EBX
  2819.  
  2820.         dec  ESI
  2821.       jnz  LoopOutClippedTextureGrdTransHorz
  2822.  
  2823.   EndLoopOutTextureGrdTransHorz :
  2824.  
  2825.   popad
  2826. } // End asm
  2827. } // End of _DrawTextureGrdTransHorz
  2828.  
  2829.  
  2830. //***************************************************
  2831. //
  2832. //  Hazing Routines
  2833. //
  2834. //***************************************************
  2835.  
  2836. // VOID _DrawSolidNoHazeHorz ( LONG Color, LONG LoopCount, LONG SkipRow, LONG SideClipped )
  2837. //
  2838. // EAX = Color, EDX = LoopCount, EBX = SkipRow, ECX = SideClipped
  2839.  
  2840. VOID _DrawSolidNoHazeHorz ( LONG nColor, LONG nLoopCount, 
  2841.                                       LONG SkipRow, LONG SideClipped )
  2842. {
  2843. _asm {
  2844.   pushad
  2845.  
  2846.   mov EAX, nColor
  2847.   mov EDX, nLoopCount
  2848.   mov EBX, SkipRow
  2849.   mov ECX, SideClipped
  2850.     
  2851.   mov  Color, EAX
  2852.  
  2853.   sub  EDX, EBX
  2854.   mov  LoopCount, EDX
  2855.  
  2856.   cmp  EBX, 0
  2857.   je   CheckClippedSolidNoHazeHorz 
  2858.  
  2859.     mov  EAX, _LeftDx
  2860.     imul  EBX
  2861.     add  _LeftX, EAX
  2862.  
  2863.     mov  EAX, _RightDx
  2864.     imul  EBX
  2865.     add  _RightX, EAX
  2866.  
  2867.     mov  EAX, _LeftDh
  2868.     imul  EBX
  2869.     add  _LeftH, EAX
  2870.  
  2871.     mov  EAX, _RightDh
  2872.     imul  EBX
  2873.     add  _RightH, EAX
  2874.  
  2875.     mov  EAX, _AddDest
  2876.     imul  EBX
  2877.     add  _DestBuffer, EAX
  2878.  
  2879.   CheckClippedSolidNoHazeHorz :
  2880.     cmp  ECX, 0
  2881.     jne  DrawSolidNoHazeHorzClip
  2882.  
  2883. ;  DrawSolidNoHazeHorzNoClip :
  2884.     cld
  2885.     mov  ESI, LoopCount
  2886.     cmp  ESI, 0
  2887.     jle  EndLoopOutSolidNoHazeHorz
  2888.     adc  EAX, 0        ; Make sure the loop starts with U pipe
  2889.     nop          
  2890.  
  2891.     LoopOutSolidNoHazeHorz :
  2892.       mov  EBX, _LeftX    ; U
  2893.       mov  EAX, EBX        ; U
  2894.       add  EBX, _LeftDx   ; V
  2895.       sar  EAX, 16         ; U EAX is the Left X
  2896.       mov  _LeftX, EBX    ; V
  2897.  
  2898.       mov  EDX, _RightX   ; U
  2899.       mov  ECX, EDX        ; U
  2900.       add  EDX, _RightDx  ; V
  2901.       sar  ECX, 16         ; U ECX is the Right X
  2902.       mov  _RightX, EDX   ; V
  2903.  
  2904.       mov  EBX, _DestBuffer  ; U
  2905.       mov  EDI, EBX           ; U
  2906.       add  EBX, _AddDest     ; V
  2907.       sub  ECX, EAX           ; U
  2908.  
  2909.       mov  _DestBuffer, EBX  ; V
  2910.  
  2911.       add  EDI, EAX           ; U
  2912.       inc  ECX                ; V
  2913.       
  2914.       mov  EBX, _LeftH    ; U
  2915.       mov  EAX, EBX        ; U   EAX is the Left Haze
  2916.       add  EBX, _LeftDh   ; V
  2917.       mov  _LeftH, EBX    ; V
  2918.       
  2919.       mov  EBX, _RightH   ; U
  2920.       mov  EDX, EBX        ; U   EDX is the Right Haze
  2921.       add  EBX, _RightDh  ; V
  2922.       mov  _RightH, EBX   ; V
  2923.             
  2924.       cmp  ECX, 0
  2925.       jle  NextRowSolidNoHazeHorzNoClip
  2926.       
  2927.       mov  EBX, EAX        ; EBX is the Left Haze
  2928.       sub  EDX, EAX
  2929.       mov  EAX, EDX
  2930.       sar  EDX, 01Fh
  2931.       idiv ECX
  2932.       mov  InDeltaDh, EAX
  2933.  
  2934.       mov  EBP, _LeftH
  2935.       mov  EAX, Color        
  2936.       mov  EDX, InDeltaDh
  2937.       push ESI
  2938.       mov  ESI, _HazeBuffer
  2939.       
  2940.         InLoopSolidNoHazeHorz :
  2941.           mov  EBX, EBP
  2942.           shr  EBX, 8
  2943.           mov  BL, AL
  2944.           add  EBP, EDX
  2945.           mov  AH, [EBX+ESI]
  2946.           mov  [EDI], AH
  2947.           inc  EDI
  2948.           loop InLoopSolidNoHazeHorz
  2949.  
  2950.       pop  ESI
  2951.  
  2952.       NextRowSolidNoHazeHorzNoClip :
  2953.         dec  ESI
  2954.         jnz  LoopOutSolidNoHazeHorz
  2955.       jmp  EndLoopOutSolidNoHazeHorz
  2956.  
  2957.   DrawSolidNoHazeHorzClip :
  2958.     cld
  2959.     mov  ESI, LoopCount
  2960.     cmp  ESI, 0
  2961.     jle  EndLoopOutSolidNoHazeHorz
  2962.     adc  EAX, 0        ; Make sure the loop starts with U pipe
  2963.     nop          
  2964.  
  2965.     LoopOutClippedSolidNoHazeHorz :
  2966.       mov  EBX, _LeftX    ; U
  2967.       mov  EAX, EBX        ; U
  2968.       add  EBX, _LeftDx   ; V
  2969.       sar  EAX, 16         ; U EAX is the Left X
  2970.       mov  _LeftX, EBX    ; V
  2971.  
  2972.       mov  EDX, _RightX   ; U
  2973.       mov  ECX, EDX        ; U
  2974.       add  EDX, _RightDx  ; V
  2975.       sar  ECX, 16         ; U ECX is the Right X
  2976.       mov  _RightX, EDX   ; V
  2977.  
  2978.       mov  EBX, _DestBuffer  ; U
  2979.       mov  EDI, EBX           ; U
  2980.       add  EBX, _AddDest     ; V
  2981.       mov  _DestBuffer, EBX  ; U
  2982.  
  2983.       mov  TempLen, ECX
  2984.       sub  TempLen, EAX
  2985.       inc  TempLen
  2986.       mov  EBX, 0
  2987.  
  2988.         ; Check for Easy reject
  2989.         cmp  EAX, VMaxX      ; Left is greater than MaxX
  2990.         jg   NextRowSolidNoHazeHorz
  2991.         cmp  ECX, VMinX      ; Right is smaller than MinX
  2992.         jl   NextRowSolidNoHazeHorz
  2993.  
  2994.         ; Check for Left
  2995.         cmp  EAX, VMinX
  2996.         jge  CheckRightSolidNoHazeHorz
  2997.           mov  EBX, VMinX
  2998.           sub  EBX, EAX
  2999.           mov  EAX, VMinX    ; Set Left to MinX
  3000.  
  3001.         ; Check for Right
  3002.         CheckRightSolidNoHazeHorz :
  3003.           cmp  ECX, VMaxX
  3004.           jle  StartSolidNoHazeHorz
  3005.           mov  ECX, VMaxX    ; Set Right to MaxX
  3006.  
  3007.     StartSolidNoHazeHorz :  ; Clipped
  3008.       sub  ECX, EAX
  3009.       inc  ECX
  3010.  
  3011.       add  EDI, EAX
  3012.  
  3013.       mov  EBP, TempLen    ; EBP is the loop count before clipped
  3014.       mov  TempLen, EBX    ; TempLen is now the skip pixel in x-direction
  3015.  
  3016.       mov  EBX, _LeftH    ; U
  3017.       mov  EAX, EBX        ; U   EAX is the Left Haze
  3018.       add  EBX, _LeftDh   ; V
  3019.       mov  _LeftH, EBX    ; V
  3020.       
  3021.       mov  EBX, _RightH   ; U
  3022.       mov  EDX, EBX        ; U   EDX is the Right Haze
  3023.       add  EBX, _RightDh  ; V
  3024.       mov  _RightH, EBX   ; V
  3025.             
  3026.       cmp  ECX, 0
  3027.       jle  NextRowSolidNoHazeHorz
  3028.  
  3029.       mov  EBX, EAX        ; EAX is Left Haze
  3030.       sub  EDX, EAX
  3031.       mov  EAX, EDX
  3032.       sar  EDX, 01Fh
  3033.       idiv EBP
  3034.       mov  InDeltaDh, EAX
  3035.  
  3036.       ; Add Delta for Skipped pixel
  3037.       mov  EBP, _LeftH
  3038.       mov  EAX, InDeltaDh
  3039.       imul TempLen 
  3040.       add  EBP, EAX
  3041.  
  3042.       mov  EAX, Color        
  3043.       mov  EDX, InDeltaDh 
  3044.       push ESI
  3045.       mov  ESI, _HazeBuffer
  3046.       
  3047.         InLoopClippedSolidNoHazeHorz :
  3048.           mov  EBX, EBP
  3049.           shr  EBX, 8
  3050.           mov  BL, AL
  3051.           mov  AH, [EBX+ESI]
  3052.           add  EBP, EDX
  3053.           mov  [EDI], AH
  3054.           inc  EDI
  3055.           loop InLoopClippedSolidNoHazeHorz
  3056.     
  3057.       pop  ESI
  3058.       NextRowSolidNoHazeHorz : 
  3059.         dec  ESI
  3060.       jnz  LoopOutClippedSolidNoHazeHorz
  3061.  
  3062.   EndLoopOutSolidNoHazeHorz :
  3063.  
  3064.   popad
  3065. } // End asm
  3066. } // End of _DrawSolidNoHazeHorz
  3067.  
  3068.  
  3069. // VOID _DrawSolidGrdHazeHorz ( LONG Color, LONG LoopCount, LONG SkipRow, LONG SideClipped )
  3070. //
  3071. // EAX = Color, EDX = LoopCount, EBX = SkipRow, ECX = SideClipped
  3072.  
  3073. VOID _DrawSolidGrdHazeHorz ( LONG nColor, LONG nLoopCount, 
  3074.                                       LONG SkipRow, LONG SideClipped )  
  3075. {
  3076. _asm {
  3077.   pushad
  3078.  
  3079.   mov EAX, nColor
  3080.   mov EDX, nLoopCount
  3081.   mov EBX, SkipRow
  3082.   mov ECX, SideClipped
  3083.   
  3084.   mov  Color, EAX
  3085.  
  3086.   sub  EDX, EBX
  3087.   mov  LoopCount, EDX
  3088.  
  3089.   cmp  EBX, 0
  3090.   je   CheckClippedSolidGrdHazeHorz 
  3091.  
  3092.     mov  EAX, _LeftDx
  3093.     imul  EBX
  3094.     add  _LeftX, EAX
  3095.  
  3096.     mov  EAX, _RightDx
  3097.     imul  EBX
  3098.     add  _RightX, EAX
  3099.  
  3100.     mov  EAX, _LeftDI
  3101.     imul  EBX
  3102.     add  _LeftI, EAX
  3103.  
  3104.     mov  EAX, _RightDI
  3105.     imul  EBX
  3106.     add  _RightI, EAX
  3107.  
  3108.     mov  EAX, _LeftDh
  3109.     imul  EBX
  3110.     add  _LeftH, EAX
  3111.  
  3112.     mov  EAX, _RightDh
  3113.     imul  EBX
  3114.     add  _RightH, EAX
  3115.  
  3116.     mov  EAX, _AddDest
  3117.     imul  EBX
  3118.     add  _DestBuffer, EAX
  3119.  
  3120.   CheckClippedSolidGrdHazeHorz :
  3121.     cmp  ECX, 0
  3122.     jne  DrawSolidGrdHazeHorzClip
  3123.  
  3124. ;  DrawSolidGrdHazeHorzNoClip :
  3125.     cld
  3126.     mov  ESI, LoopCount
  3127.     cmp  ESI, 0
  3128.     jle  EndLoopOutSolidGrdHazeHorz
  3129.     adc  EAX, 0        ; Make sure the loop starts with U pipe
  3130.     nop          
  3131.  
  3132.     LoopOutSolidGrdHazeHorz :
  3133.       mov  EBX, _LeftX    ; U
  3134.       mov  EAX, EBX        ; U
  3135.       add  EBX, _LeftDx   ; V
  3136.       sar  EAX, 16         ; U EAX is the Left X
  3137.       mov  _LeftX, EBX    ; V
  3138.  
  3139.       mov  EDX, _RightX   ; U
  3140.       mov  ECX, EDX        ; U
  3141.       add  EDX, _RightDx  ; V
  3142.       sar  ECX, 16         ; U ECX is the Right X
  3143.       mov  _RightX, EDX   ; V
  3144.  
  3145.       mov  EBX, _DestBuffer  ; U
  3146.       mov  EDI, EBX           ; U
  3147.       add  EBX, _AddDest     ; V
  3148.       sub  ECX, EAX           ; U
  3149.  
  3150.       mov  _DestBuffer, EBX  ; V
  3151.  
  3152.       add  EDI, EAX           ; U
  3153.       inc  ECX                ; V
  3154.       
  3155.       cmp  ECX, 0
  3156.       jle  NextRowSolidGrdHazeHorzNoClip
  3157.  
  3158.       mov  EAX, _LeftI    ; U     EAX is the Left I
  3159.       mov  EDX, _RightI   ; U     EDX is the Right I      
  3160.       sub  EDX, EAX
  3161.       sar  EDX, 8
  3162.       mov  EAX, EDX
  3163.       sar  EDX, 01Fh
  3164.       idiv ECX
  3165.       mov  InDeltaDI, EAX
  3166.  
  3167.       mov  EAX, _LeftH    ; U     EAX is the Left Haze
  3168.       mov  EDX, _RightH   ; U     EDX is the Right Haze      
  3169.       sub  EDX, EAX
  3170.       sar  EDX, 8
  3171.       mov  EAX, EDX
  3172.       sar  EDX, 01Fh
  3173.       idiv ECX
  3174.       mov  InDeltaDh, EAX
  3175.  
  3176.       mov  EBP, _LeftI
  3177.       sar  EBP, 8
  3178.       mov  EAX, Color        
  3179.       mov  EDX, _HazeBuffer
  3180.       push ESI
  3181.       mov  ESI, _ShadeBuffer
  3182.       mov  InLoopCount, CX
  3183.       mov  ECX, _LeftH
  3184.       sar  ECX, 8
  3185.       
  3186.         InLoopSolidGrdHazeHorz :
  3187.           mov  EBX, EBP
  3188.           mov  BL, AL
  3189.           add  EBP, InDeltaDI
  3190.           mov  AH, [EBX+ESI]
  3191.           mov  EBX, ECX
  3192.           mov  BL, AH
  3193.           add  ECX, InDeltaDh
  3194.           mov  AH, [EBX+EDX]
  3195.           mov  [EDI], AH
  3196.           inc  EDI
  3197.           dec  InLoopCount
  3198.           jnz  InLoopSolidGrdHazeHorz
  3199.  
  3200.       pop  ESI
  3201.  
  3202.       NextRowSolidGrdHazeHorzNoClip :
  3203.         mov  EAX, _LeftI
  3204.         mov  EBX, _RightI
  3205.         add  EAX, _LeftDI
  3206.         add  EBX, _RightDI
  3207.         mov  _LeftI, EAX
  3208.         mov  _RightI, EBX
  3209.  
  3210.         mov  EAX, _LeftH
  3211.         mov  EBX, _RightH
  3212.         add  EAX, _LeftDh
  3213.         add  EBX, _RightDh
  3214.         mov  _LeftH, EAX
  3215.         mov  _RightH, EBX
  3216.  
  3217.         dec  ESI
  3218.         jnz  LoopOutSolidGrdHazeHorz
  3219.       jmp  EndLoopOutSolidGrdHazeHorz
  3220.  
  3221.   DrawSolidGrdHazeHorzClip :
  3222.     cld
  3223.     mov  ESI, LoopCount
  3224.     cmp  ESI, 0
  3225.     jle  EndLoopOutSolidGrdHazeHorz
  3226.     adc  EAX, 0        ; Make sure the loop starts with U pipe
  3227.     nop          
  3228.  
  3229.     LoopOutClippedSolidGrdHazeHorz :
  3230.       mov  EBX, _LeftX    ; U
  3231.       mov  EAX, EBX        ; U
  3232.       add  EBX, _LeftDx   ; V
  3233.       sar  EAX, 16         ; U EAX is the Left X
  3234.       mov  _LeftX, EBX    ; V
  3235.  
  3236.       mov  EDX, _RightX   ; U
  3237.       mov  ECX, EDX        ; U
  3238.       add  EDX, _RightDx  ; V
  3239.       sar  ECX, 16         ; U ECX is the Right X
  3240.       mov  _RightX, EDX   ; V
  3241.  
  3242.       mov  EBX, _DestBuffer  ; U
  3243.       mov  EDI, EBX           ; U
  3244.       add  EBX, _AddDest     ; V
  3245.       mov  _DestBuffer, EBX  ; U
  3246.  
  3247.       mov  TempLen, ECX
  3248.       sub  TempLen, EAX
  3249.       inc  TempLen
  3250.       mov  EBX, 0
  3251.  
  3252.         ; Check for Easy reject
  3253.         cmp  EAX, VMaxX      ; Left is greater than MaxX
  3254.         jg   NextRowSolidGrdHazeHorz
  3255.         cmp  ECX, VMinX      ; Right is smaller than MinX
  3256.         jl   NextRowSolidGrdHazeHorz
  3257.  
  3258.         ; Check for Left
  3259.         cmp  EAX, VMinX
  3260.         jge  CheckRightSolidGrdHazeHorz
  3261.           mov  EBX, VMinX
  3262.           sub  EBX, EAX
  3263.           mov  EAX, VMinX    ; Set Left to MinX
  3264.  
  3265.         ; Check for Right
  3266.         CheckRightSolidGrdHazeHorz :
  3267.           cmp  ECX, VMaxX
  3268.           jle  StartSolidGrdHazeHorz
  3269.           mov  ECX, VMaxX    ; Set Right to MaxX
  3270.  
  3271.     StartSolidGrdHazeHorz :  ; Clipped
  3272.       sub  ECX, EAX
  3273.       inc  ECX
  3274.       cmp  ECX, 0
  3275.       jle  NextRowSolidGrdHazeHorz
  3276.  
  3277.       add  EDI, EAX
  3278.       
  3279.       mov  EBP, TempLen    ; EBP is the loop count before clipped
  3280.       mov  TempLen, EBX    ; TempLen is now the skip pixel in x-direction
  3281.  
  3282.       mov  EAX, _LeftI    ; U     EAX is the Left I
  3283.       mov  EDX, _RightI   ; U     EDX is the Right I      
  3284.       sub  EDX, EAX
  3285.       sar  EDX, 8
  3286.       mov  EAX, EDX
  3287.       sar  EDX, 01Fh
  3288.       idiv EBP
  3289.       mov  InDeltaDI, EAX
  3290.  
  3291.       mov  EAX, _LeftH    ; U     EAX is the Left Haze
  3292.       mov  EDX, _RightH   ; U     EDX is the Right Haze            
  3293.       sub  EDX, EAX
  3294.       sar  EDX, 8
  3295.       mov  EAX, EDX
  3296.       sar  EDX, 01Fh
  3297.       idiv EBP
  3298.       mov  InDeltaDh, EAX
  3299.  
  3300.       mov  InLoopCount, CX
  3301.       
  3302.       ; Add Delta for Skipped pixel
  3303.       mov  EBP, _LeftI
  3304.       sar  EBP, 8
  3305.       mov  EAX, InDeltaDI
  3306.       imul TempLen 
  3307.       add  EBP, EAX
  3308.  
  3309.       mov  ECX, _LeftH
  3310.       sar  ECX, 8
  3311.       mov  EAX, InDeltaDh
  3312.       imul TempLen 
  3313.       add  ECX, EAX
  3314.       
  3315.       mov  EAX, Color        
  3316.       mov  EDX, _HazeBuffer
  3317.       push ESI
  3318.       mov  ESI, _ShadeBuffer
  3319.       
  3320.         InLoopClippedSolidGrdHazeHorz :
  3321.           mov  EBX, EBP
  3322.           mov  BL, AL
  3323.           add  EBP, InDeltaDI
  3324.           mov  AH, [EBX+ESI]
  3325.           mov  EBX, ECX
  3326.           mov  BL, AH
  3327.           add  ECX, InDeltaDh
  3328.           mov  AH, [EBX+EDX]
  3329.           mov  [EDI], AH
  3330.           inc  EDI
  3331.           dec  InLoopCount
  3332.           jnz  InLoopClippedSolidGrdHazeHorz
  3333.     
  3334.       pop  ESI
  3335.       
  3336.       NextRowSolidGrdHazeHorz : 
  3337.         mov  EAX, _LeftI
  3338.         mov  EBX, _RightI
  3339.         add  EAX, _LeftDI
  3340.         add  EBX, _RightDI
  3341.         mov  _LeftI, EAX
  3342.         mov  _RightI, EBX
  3343.  
  3344.         mov  EAX, _LeftH
  3345.         mov  EBX, _RightH
  3346.         add  EAX, _LeftDh
  3347.         add  EBX, _RightDh
  3348.         mov  _LeftH, EAX
  3349.         mov  _RightH, EBX
  3350.  
  3351.         dec  ESI
  3352.       jnz  LoopOutClippedSolidGrdHazeHorz
  3353.  
  3354.   EndLoopOutSolidGrdHazeHorz :
  3355.  
  3356.   popad
  3357. } // End asm
  3358. } // End of _DrawSolidGrdHazeHorz
  3359.  
  3360. // VOID _DrawTextureNoHazeHorz ( LONG Color, LONG LoopCount, LONG SkipRow, LONG SideClipped )
  3361. //
  3362. // EAX = Color, EDX = LoopCount, EBX = SkipRow, ECX = SideClipped
  3363.  
  3364. VOID _DrawTextureNoHazeHorz ( LONG nColor, LONG nLoopCount, 
  3365.                                       LONG SkipRow, LONG SideClipped )  
  3366. {
  3367. _asm {
  3368.   pushad
  3369.  
  3370.   mov EAX, nColor
  3371.   mov EDX, nLoopCount
  3372.   mov EBX, SkipRow
  3373.   mov ECX, SideClipped
  3374.   
  3375.   sub  EDX, EBX
  3376.   mov  LoopCount, EDX
  3377.  
  3378.   cmp  EBX, 0
  3379.   je   CheckClippedTextureNoHazeHorz 
  3380.  
  3381.     mov  EAX, _LeftDx
  3382.     imul  EBX
  3383.     add  _LeftX, EAX
  3384.  
  3385.     mov  EAX, _RightDx
  3386.     imul  EBX
  3387.     add  _RightX, EAX
  3388.  
  3389.     mov  EAX, _LeftDu
  3390.     imul  EBX
  3391.     add  _LeftU, EAX
  3392.  
  3393.     mov  EAX, _RightDu
  3394.     imul  EBX
  3395.     add  _RightU, EAX
  3396.  
  3397.     mov  EAX, _LeftDv
  3398.     imul  EBX
  3399.     add  _LeftV, EAX
  3400.  
  3401.     mov  EAX, _RightDv
  3402.     imul  EBX
  3403.     add  _RightV, EAX
  3404.  
  3405.     mov  EAX, _LeftDh
  3406.     imul  EBX
  3407.     add  _LeftH, EAX
  3408.  
  3409.     mov  EAX, _RightDh
  3410.     imul  EBX
  3411.     add  _RightH, EAX
  3412.     
  3413.     mov  EAX, _AddDest
  3414.     imul  EBX
  3415.     add  _DestBuffer, EAX
  3416.  
  3417.   CheckClippedTextureNoHazeHorz :
  3418.     cmp  ECX, 0
  3419.     jne  DrawTextureNoHazeHorzClip
  3420.  
  3421. ;  DrawTextureNoHazeHorzNoClip :
  3422.     cld
  3423.     mov  ESI, LoopCount
  3424.     cmp  ESI, 0
  3425.     jle  EndLoopOutTextureNoHazeHorz
  3426.     adc  EAX, 0        ; Make sure the loop starts with U pipe
  3427.     nop          
  3428.  
  3429.     LoopOutTextureNoHazeHorz :
  3430.       mov  EBX, _LeftX    ; U
  3431.       mov  EAX, EBX        ; U
  3432.       add  EBX, _LeftDx   ; V
  3433.       sar  EAX, 16         ; U EAX is the Left X
  3434.       mov  _LeftX, EBX    ; V
  3435.  
  3436.       mov  EDX, _RightX   ; U
  3437.       mov  ECX, EDX        ; U
  3438.       add  EDX, _RightDx  ; V
  3439.       sar  ECX, 16         ; U ECX is the Right X
  3440.       mov  _RightX, EDX   ; V
  3441.  
  3442.       mov  EBX, _DestBuffer  ; U
  3443.       mov  EDI, EBX           ; U
  3444.       add  EBX, _AddDest     ; V
  3445.       mov  _DestBuffer, EBX  ; U
  3446.  
  3447.       sub  ECX, EAX           ; V
  3448.       add  EDI, EAX           ; U
  3449.       inc  ECX                ; V
  3450.             
  3451.       cmp  ECX, 0
  3452.       jle  NextRowTextureNoHazeHorzNoClip
  3453.  
  3454.       mov  EBP, ECX
  3455.       shl  EBP, 2
  3456.       add  EBP, _DivTable
  3457.       fld  dword ptr [EBP] 
  3458.       
  3459.       mov  EBP, ECX      ; EBP is the loop
  3460.  
  3461.       mov  EAX, _LeftH    ; U     EAX is the Left Haze
  3462.       mov  EDX, _RightH   ; U     EDX is the Right Haze      
  3463.       sub  EDX, EAX
  3464.       sar  EDX, 8
  3465.       mov  EAX, EDX
  3466.       sar  EDX, 01Fh
  3467.       idiv ECX
  3468.       mov  InDeltaDh, EAX
  3469.  
  3470.       mov  EAX, _LeftU    
  3471.       mov  EDX, _RightU         
  3472.       sub  EDX, EAX
  3473.       sar  EDX, 8
  3474.       mov  InDeltaDu, EDX
  3475.       fild InDeltaDu      
  3476.       fmul st, st(1)
  3477.       fistp InDeltaDu
  3478.       
  3479.       mov  EAX, _LeftV    
  3480.       mov  EDX, _RightV         
  3481.       sub  EDX, EAX
  3482.       sar  EDX, 8
  3483.       mov  InDeltaDv, EDX
  3484.       fild InDeltaDv      
  3485.       fmul st, st(1)
  3486.       fistp InDeltaDv
  3487.  
  3488.       fstp DummyFloat
  3489.  
  3490.       push ESI
  3491.  
  3492.       mov  EAX, _LeftH
  3493.       sar  EAX, 8
  3494.       mov  ECX, _LeftU
  3495.       sar  ECX, 8
  3496.       mov  EDX, _LeftV
  3497.       sar  EDX, 8
  3498.       mov  ESI, _TextureBuffer
  3499.       mov  InLoopCount, BP
  3500.       mov  EBP, _HazeBuffer
  3501.       mov  EBX, 0
  3502.  
  3503.         InLoopTextureNoHazeHorz :
  3504.           mov  BH, DH
  3505.           mov  BL, CH
  3506.           add  ECX, InDeltaDu
  3507.           mov  BL, [EBX+ESI]
  3508.           mov  BH, AH
  3509.           add  EAX, InDeltaDh          
  3510.           mov  BL, [EBX+EBP]
  3511.           add  EDX, InDeltaDv
  3512.           mov  [EDI], BL
  3513.           inc  EDI
  3514.           dec  InLoopCount
  3515.           jnz  InLoopTextureNoHazeHorz
  3516.  
  3517.       pop  ESI
  3518.  
  3519.       NextRowTextureNoHazeHorzNoClip :
  3520.  
  3521.       mov  EAX, _LeftU
  3522.       mov  EBX, _LeftV
  3523.       add  EAX, _LeftDu
  3524.       add  EBX, _LeftDv
  3525.       mov  _LeftU, EAX
  3526.       mov  _LeftV, EBX
  3527.  
  3528.       mov  EAX, _RightU
  3529.       mov  EBX, _RightV
  3530.       add  EAX, _RightDu
  3531.       add  EBX, _RightDv
  3532.       mov  _RightU, EAX
  3533.       mov  _RightV, EBX
  3534.  
  3535.       mov  EAX, _LeftH
  3536.       mov  EBX, _RightH
  3537.       add  EAX, _LeftDh
  3538.       add  EBX, _RightDh
  3539.       mov  _LeftH, EAX
  3540.       mov  _RightH, EBX
  3541.  
  3542.       dec  ESI
  3543.       jnz  LoopOutTextureNoHazeHorz
  3544.       jmp  EndLoopOutTextureNoHazeHorz
  3545.  
  3546.   DrawTextureNoHazeHorzClip :
  3547.     cld
  3548.     mov  ESI, LoopCount
  3549.     cmp  ESI, 0
  3550.     jle  EndLoopOutTextureNoHazeHorz
  3551.     adc  EAX, 0        ; Make sure the loop starts with U pipe
  3552.     nop          
  3553.  
  3554.     LoopOutClippedTextureNoHazeHorz :
  3555.       mov  EBX, _LeftX    ; U
  3556.       mov  EAX, EBX        ; U
  3557.       add  EBX, _LeftDx   ; V
  3558.       sar  EAX, 16         ; U EAX is the Left X
  3559.       mov  _LeftX, EBX    ; V
  3560.  
  3561.       mov  EDX, _RightX   ; U
  3562.       mov  ECX, EDX        ; U
  3563.       add  EDX, _RightDx  ; V
  3564.       sar  ECX, 16         ; U ECX is the Right X
  3565.       mov  _RightX, EDX   ; V
  3566.  
  3567.       mov  EBX, _DestBuffer  ; U
  3568.       mov  EDI, EBX           ; U
  3569.       add  EBX, _AddDest     ; V
  3570.       mov  _DestBuffer, EBX  ; U
  3571.  
  3572.       mov  TempLen, ECX
  3573.       sub  TempLen, EAX
  3574.       inc  TempLen
  3575.       mov  EBX, 0
  3576.  
  3577.         ; Check for Easy reject
  3578.         cmp  EAX, VMaxX      ; Left is greater than MaxX
  3579.         jg   NextRowTextureNoHazeHorz
  3580.         cmp  ECX, VMinX      ; Right is smaller than MinX
  3581.         jl   NextRowTextureNoHazeHorz
  3582.  
  3583.         ; Check for Left
  3584.         cmp  EAX, VMinX
  3585.         jge  CheckRightTextureNoHazeHorz
  3586.           mov  EBX, VMinX
  3587.           sub  EBX, EAX
  3588.           mov  EAX, VMinX    ; Set Left to MinX
  3589.  
  3590.         ; Check for Right
  3591.       CheckRightTextureNoHazeHorz :
  3592.         cmp  ECX, VMaxX
  3593.         jle  StartTextureNoHazeHorz
  3594.         mov  ECX, VMaxX    ; Set Right to MaxX
  3595.  
  3596.     StartTextureNoHazeHorz :
  3597.       sub  ECX, EAX
  3598.       inc  ECX
  3599.  
  3600.       cmp  ECX, 0
  3601.       jle  NextRowTextureNoHazeHorz
  3602.  
  3603.       add  EDI, EAX
  3604.  
  3605.       mov  EBP, TempLen
  3606.       shl  EBP, 2
  3607.       add  EBP, _DivTable
  3608.       fld  dword ptr [EBP]
  3609.       
  3610.       mov  EBP, TempLen
  3611.       mov  TempLen, EBX
  3612.  
  3613.       mov  EAX, _LeftH    ; U     EAX is the Left Haze
  3614.       mov  EDX, _RightH   ; U     EDX is the Right Haze      
  3615.       sub  EDX, EAX
  3616.       sar  EDX, 8
  3617.       mov  EAX, EDX
  3618.       sar  EDX, 01Fh
  3619.       idiv EBP
  3620.       mov  InDeltaDh, EAX
  3621.  
  3622.       mov  EAX, _LeftU
  3623.       mov  EDX, _RightU         
  3624.       sub  EDX, EAX
  3625.       sar  EDX, 8
  3626.       mov  InDeltaDu, EDX
  3627.       fild InDeltaDu      
  3628.       fmul st, st(1)
  3629.       fistp InDeltaDu
  3630.       
  3631.       mov  EAX, _LeftV    
  3632.       mov  EDX, _RightV         
  3633.       sub  EDX, EAX
  3634.       sar  EDX, 8
  3635.       mov  InDeltaDv, EDX
  3636.       fild InDeltaDv      
  3637.       fmul st, st(1)
  3638.       fistp InDeltaDv
  3639.  
  3640.       fstp  DummyFloat
  3641.  
  3642.       push ESI
  3643.  
  3644.       mov  InLoopCount, CX
  3645.  
  3646.       mov  EAX, InDeltaDh
  3647.       imul TempLen
  3648.       mov  EBX, _LeftH
  3649.       sar  EBX, 8
  3650.       add  EBX, EAX
  3651.  
  3652.       mov  EAX, InDeltaDu
  3653.       imul TempLen
  3654.       mov  ECX, _LeftU
  3655.       sar  ECX, 8
  3656.       add  ECX, EAX
  3657.  
  3658.       mov  EAX, InDeltaDv
  3659.       imul TempLen
  3660.       mov  EDX, _LeftV
  3661.       sar  EDX, 8
  3662.       add  EDX, EAX
  3663.  
  3664.       mov  EAX, EBX
  3665.       mov  EBP, _HazeBuffer      
  3666.       mov  ESI, _TextureBuffer
  3667.       mov  EBX, 0
  3668.  
  3669.         InLoopClippedTextureNoHazeHorz :
  3670.           mov  BH, DH
  3671.           mov  BL, CH
  3672.           add  ECX, InDeltaDu
  3673.           mov  BL, [EBX+ESI]
  3674.           mov  BH, AH
  3675.           add  EAX, InDeltaDh          
  3676.           mov  BL, [EBX+EBP]
  3677.           add  EDX, InDeltaDv
  3678.           mov  [EDI], BL
  3679.           inc  EDI
  3680.           dec  InLoopCount
  3681.           jnz  InLoopClippedTextureNoHazeHorz
  3682.  
  3683.       pop  ESI
  3684.  
  3685.       NextRowTextureNoHazeHorz : 
  3686.         mov  EAX, _LeftU
  3687.         mov  EBX, _LeftV
  3688.         add  EAX, _LeftDu
  3689.         add  EBX, _LeftDv
  3690.         mov  _LeftU, EAX
  3691.         mov  _LeftV, EBX
  3692.  
  3693.         mov  EAX, _RightU
  3694.         mov  EBX, _RightV
  3695.         add  EAX, _RightDu
  3696.         add  EBX, _RightDv
  3697.         mov  _RightU, EAX
  3698.         mov  _RightV, EBX
  3699.  
  3700.         mov  EAX, _LeftH
  3701.         mov  EBX, _RightH
  3702.         add  EAX, _LeftDh
  3703.         add  EBX, _RightDh
  3704.         mov  _LeftH, EAX
  3705.         mov  _RightH, EBX
  3706.  
  3707.         dec  ESI
  3708.       jnz  LoopOutClippedTextureNoHazeHorz
  3709.  
  3710.   EndLoopOutTextureNoHazeHorz :
  3711.  
  3712.   popad
  3713. } // End asm
  3714. } // End of _DrawTextureNoHazeHorz
  3715.  
  3716.  
  3717. // VOID _DrawTextureFlatHazeHorz ( LONG Color, LONG LoopCount, LONG SkipRow, LONG SideClipped )
  3718. //
  3719. // EAX = Color, EDX = LoopCount, EBX = SkipRow, ECX = SideClipped
  3720.  
  3721. VOID _DrawTextureFlatHazeHorz ( LONG nColor, LONG nLoopCount, 
  3722.                                       LONG SkipRow, LONG SideClipped )  
  3723. {
  3724. _asm {
  3725.   pushad
  3726.  
  3727.   mov EAX, nColor
  3728.   mov EDX, nLoopCount
  3729.   mov EBX, SkipRow
  3730.   mov ECX, SideClipped
  3731.   
  3732.   sub  EDX, EBX
  3733.   mov  LoopCount, EDX
  3734.  
  3735.   cmp  EBX, 0
  3736.   je   CheckClippedTextureFlatHazeHorz 
  3737.  
  3738.     mov  EAX, _LeftDx
  3739.     imul  EBX
  3740.     add  _LeftX, EAX
  3741.  
  3742.     mov  EAX, _RightDx
  3743.     imul  EBX
  3744.     add  _RightX, EAX
  3745.  
  3746.     mov  EAX, _LeftDu
  3747.     imul  EBX
  3748.     add  _LeftU, EAX
  3749.  
  3750.     mov  EAX, _RightDu
  3751.     imul  EBX
  3752.     add  _RightU, EAX
  3753.  
  3754.     mov  EAX, _LeftDv
  3755.     imul  EBX
  3756.     add  _LeftV, EAX
  3757.  
  3758.     mov  EAX, _RightDv
  3759.     imul  EBX
  3760.     add  _RightV, EAX
  3761.  
  3762.     mov  EAX, _LeftDh
  3763.     imul  EBX
  3764.     add  _LeftH, EAX
  3765.  
  3766.     mov  EAX, _RightDh
  3767.     imul  EBX
  3768.     add  _RightH, EAX
  3769.     
  3770.     mov  EAX, _AddDest
  3771.     imul  EBX
  3772.     add  _DestBuffer, EAX
  3773.  
  3774.   CheckClippedTextureFlatHazeHorz :
  3775.     cmp  ECX, 0
  3776.     jne  DrawTextureFlatHazeHorzClip
  3777.  
  3778.  ; DrawTextureFlatHazeHorzNoClip :
  3779.     cld
  3780.     mov  ESI, LoopCount
  3781.     cmp  ESI, 0
  3782.     jle  EndLoopOutTextureFlatHazeHorz
  3783.     adc  EAX, 0        ; Make sure the loop starts with U pipe
  3784.     nop          
  3785.  
  3786.     LoopOutTextureFlatHazeHorz :
  3787.       mov  EBX, _LeftX    ; U
  3788.       mov  EAX, EBX        ; U
  3789.       add  EBX, _LeftDx   ; V
  3790.       sar  EAX, 16         ; U EAX is the Left X
  3791.       mov  _LeftX, EBX    ; V
  3792.  
  3793.       mov  EDX, _RightX   ; U
  3794.       mov  ECX, EDX        ; U
  3795.       add  EDX, _RightDx  ; V
  3796.       sar  ECX, 16         ; U ECX is the Right X
  3797.       mov  _RightX, EDX   ; V
  3798.  
  3799.       mov  EBX, _DestBuffer  ; U
  3800.       mov  EDI, EBX           ; U
  3801.       add  EBX, _AddDest     ; V
  3802.       sub  ECX, EAX           ; U
  3803.  
  3804.       mov  _DestBuffer, EBX  ; V
  3805.  
  3806.       add  EDI, EAX           ; U
  3807.       inc  ECX                ; V
  3808.  
  3809.       cmp  ECX, 0
  3810.       jle  NextRowTextureFlatHazeHorzNoClip
  3811.  
  3812.       mov  EBP, ECX
  3813.       shl  EBP, 2
  3814.       add  EBP, _DivTable
  3815.       fld  dword ptr [EBP]
  3816.       
  3817.       mov  EBP, ECX      ; EBP is the loop
  3818.  
  3819.       mov  EAX, _LeftH    ; U     EAX is the Left Haze
  3820.       mov  EDX, _RightH   ; U     EDX is the Right Haze      
  3821.       sub  EDX, EAX
  3822.       sar  EDX, 8
  3823.       mov  EAX, EDX
  3824.       sar  EDX, 01Fh
  3825.       idiv ECX
  3826.       mov  InDeltaDh, EAX
  3827.  
  3828.       mov  EAX, _LeftU    
  3829.       mov  EDX, _RightU         
  3830.       sub  EDX, EAX
  3831.       sar  EDX, 8
  3832.       mov  InDeltaDu, EDX
  3833.       fild InDeltaDu      
  3834.       fmul st, st(1)
  3835.       fistp InDeltaDu
  3836.       
  3837.       mov  EAX, _LeftV    
  3838.       mov  EDX, _RightV         
  3839.       sub  EDX, EAX
  3840.       sar  EDX, 8
  3841.       mov  InDeltaDv, EDX
  3842.       fild InDeltaDv      
  3843.       fmul st, st(1)
  3844.       fistp InDeltaDv
  3845.  
  3846.       fstp DummyFloat
  3847.  
  3848.       push ESI
  3849.  
  3850.       mov  ECX, _LeftU
  3851.       mov  EDX, _LeftV
  3852.       sar  ECX, 8
  3853.       sar  EDX, 8
  3854.  
  3855.       mov  EAX, _LeftI
  3856.       sar  EAX, 8
  3857.       mov  ESI, _ShadeBuffer
  3858.       mov  InLoopCount, BP
  3859.       mov  EBP, _LeftH
  3860.       sar  EBP, 8
  3861.       
  3862.         InLoopTextureFlatHazeHorz :
  3863.           mov  EBX, 0
  3864.           mov  BH, DH
  3865.           mov  BL, CH
  3866.           add  ECX, InDeltaDu
  3867.           add  EBX, _TextureBuffer
  3868.           mov  AL, [EBX]
  3869.           add  EDX, InDeltaDv
  3870.           mov  EBX, EBP
  3871.           mov  BL, [ESI+EAX]
  3872.           add  EBX, _HazeBuffer
  3873.           add  EBP, InDeltaDh
  3874.           mov  BL, [EBX]
  3875.           mov  [EDI], BL
  3876.           inc  EDI
  3877.           dec  InLoopCount
  3878.           jnz  InLoopTextureFlatHazeHorz
  3879.     
  3880.       pop  ESI
  3881.  
  3882.       NextRowTextureFlatHazeHorzNoClip : 
  3883.         mov  EAX, _LeftU
  3884.         mov  EBX, _LeftV
  3885.         add  EAX, _LeftDu
  3886.         add  EBX, _LeftDv
  3887.         mov  _LeftU, EAX
  3888.         mov  _LeftV, EBX
  3889.  
  3890.         mov  EAX, _RightU
  3891.         mov  EBX, _RightV
  3892.         add  EAX, _RightDu
  3893.         add  EBX, _RightDv
  3894.         mov  _RightU, EAX
  3895.         mov  _RightV, EBX
  3896.  
  3897.         mov  EAX, _LeftH
  3898.         mov  EBX, _RightH
  3899.         add  EAX, _LeftDh
  3900.         add  EBX, _RightDh
  3901.         mov  _LeftH, EAX
  3902.         mov  _RightH, EBX
  3903.  
  3904.         dec  ESI
  3905.       jnz  LoopOutTextureFlatHazeHorz
  3906.       jmp  EndLoopOutTextureFlatHazeHorz
  3907.  
  3908.   DrawTextureFlatHazeHorzClip :
  3909.     cld
  3910.     mov  ESI, LoopCount
  3911.     cmp  ESI, 0
  3912.     jle  EndLoopOutTextureFlatHazeHorz
  3913.     adc  EAX, 0        ; Make sure the loop starts with U pipe
  3914.     nop          
  3915.  
  3916.     LoopOutClippedTextureFlatHazeHorz :
  3917.       mov  EBX, _LeftX    ; U
  3918.       mov  EAX, EBX        ; U
  3919.       add  EBX, _LeftDx   ; V
  3920.       sar  EAX, 16         ; U EAX is the Left X
  3921.       mov  _LeftX, EBX    ; V
  3922.  
  3923.       mov  EDX, _RightX   ; U
  3924.       mov  ECX, EDX        ; U
  3925.       add  EDX, _RightDx  ; V
  3926.       sar  ECX, 16         ; U ECX is the Right X
  3927.       mov  _RightX, EDX   ; V
  3928.  
  3929.       mov  EBX, _DestBuffer  ; U
  3930.       mov  EDI, EBX           ; U
  3931.       add  EBX, _AddDest     ; V
  3932.       mov  _DestBuffer, EBX  ; U
  3933.  
  3934.       mov  TempLen, ECX
  3935.       sub  TempLen, EAX
  3936.       inc  TempLen
  3937.       mov  EBX, 0
  3938.  
  3939.         ; Check for Easy reject
  3940.         cmp  EAX, VMaxX      ; Left is greater than MaxX
  3941.         jg   NextRowTextureFlatHazeHorz
  3942.         cmp  ECX, VMinX      ; Right is smaller than MinX
  3943.         jl   NextRowTextureFlatHazeHorz
  3944.  
  3945.         ; Check for Left
  3946.         cmp  EAX, VMinX
  3947.         jge  CheckRightTextureFlatHazeHorz
  3948.           mov  EBX, VMinX
  3949.           sub  EBX, EAX
  3950.           mov  EAX, VMinX    ; Set Left to MinX
  3951.  
  3952.         ; Check for Right
  3953.         CheckRightTextureFlatHazeHorz :
  3954.           cmp  ECX, VMaxX
  3955.           jle  StartTextureFlatHazeHorz
  3956.           mov  ECX, VMaxX    ; Set Right to MaxX
  3957.  
  3958.     StartTextureFlatHazeHorz :
  3959.       sub  ECX, EAX
  3960.       inc  ECX
  3961.       add  EDI, EAX
  3962.  
  3963.       cmp  ECX, 0
  3964.       jle  NextRowTextureFlatHazeHorz
  3965.  
  3966.       mov  EBP, TempLen
  3967.       shl  EBP, 2
  3968.       add  EBP, _DivTable
  3969.       fld  dword ptr [EBP]
  3970.  
  3971.       mov  EBP, ECX      ; EBP is the loop
  3972.  
  3973.       mov  ECX, TempLen
  3974.       mov  TempLen, EBX    ; TempLen is now the skip pixel in x-direction
  3975.  
  3976.       mov  EAX, _LeftH    ; U     EAX is the Left Haze
  3977.       mov  EDX, _RightH   ; U     EDX is the Right Haze      
  3978.       sub  EDX, EAX
  3979.       sar  EDX, 8
  3980.       mov  EAX, EDX
  3981.       sar  EDX, 01Fh
  3982.       idiv ECX
  3983.       mov  InDeltaDh, EAX
  3984.  
  3985.       mov  EAX, _LeftU    
  3986.       mov  EDX, _RightU         
  3987.       sub  EDX, EAX
  3988.       sar  EDX, 8
  3989.       mov  InDeltaDu, EDX
  3990.       fild InDeltaDu      
  3991.       fmul st, st(1)
  3992.       fistp InDeltaDu
  3993.       
  3994.       mov  EAX, _LeftV    
  3995.       mov  EDX, _RightV         
  3996.       sub  EDX, EAX
  3997.       sar  EDX, 8
  3998.       mov  InDeltaDv, EDX
  3999.       fild InDeltaDv      
  4000.       fmul st, st(1)
  4001.       fistp InDeltaDv
  4002.  
  4003.       fstp DummyFloat
  4004.  
  4005.       push ESI
  4006.  
  4007.       mov  InLoopCount, BP
  4008.       
  4009.       mov  EAX, InDeltaDh
  4010.       imul TempLen
  4011.       mov  EBP, _LeftH
  4012.       sar  EBP, 8
  4013.       add  EBP, EAX
  4014.  
  4015.       mov  EAX, InDeltaDu
  4016.       imul TempLen
  4017.       mov  ECX, _LeftU
  4018.       sar  ECX, 8
  4019.       add  ECX, EAX
  4020.  
  4021.       mov  EAX, InDeltaDv
  4022.       imul TempLen
  4023.       mov  EDX, _LeftV
  4024.       sar  EDX, 8
  4025.       add  EDX, EAX
  4026.  
  4027.       mov  EAX, _LeftI
  4028.       sar  EAX, 8
  4029.       mov  ESI, _ShadeBuffer
  4030.       
  4031.         InLoopClippedTextureFlatHazeHorz :
  4032.           mov  EBX, 0
  4033.           mov  BH, DH
  4034.           mov  BL, CH
  4035.           add  ECX, InDeltaDu
  4036.           add  EBX, _TextureBuffer
  4037.           mov  AL, [EBX]
  4038.           add  EDX, InDeltaDv
  4039.           mov  EBX, EBP
  4040.           mov  BL, [ESI+EAX]
  4041.           add  EBX, _HazeBuffer
  4042.           add  EBP, InDeltaDh
  4043.           mov  BL, [EBX]
  4044.           mov  [EDI], BL
  4045.           inc  EDI
  4046.           dec  InLoopCount
  4047.           jnz  InLoopClippedTextureFlatHazeHorz
  4048.     
  4049.       pop  ESI
  4050.  
  4051.       NextRowTextureFlatHazeHorz : 
  4052.         mov  EAX, _LeftU
  4053.         mov  EBX, _LeftV
  4054.         add  EAX, _LeftDu
  4055.         add  EBX, _LeftDv
  4056.         mov  _LeftU, EAX
  4057.         mov  _LeftV, EBX
  4058.  
  4059.         mov  EAX, _RightU
  4060.         mov  EBX, _RightV
  4061.         add  EAX, _RightDu
  4062.         add  EBX, _RightDv
  4063.         mov  _RightU, EAX
  4064.         mov  _RightV, EBX
  4065.  
  4066.         mov  EAX, _LeftH
  4067.         mov  EBX, _RightH
  4068.         add  EAX, _LeftDh
  4069.         add  EBX, _RightDh
  4070.         mov  _LeftH, EAX
  4071.         mov  _RightH, EBX
  4072.  
  4073.         dec  ESI
  4074.       jnz  LoopOutClippedTextureFlatHazeHorz
  4075.  
  4076.   EndLoopOutTextureFlatHazeHorz :
  4077.  
  4078.   popad
  4079. } // End asm
  4080. } // End of _DrawTextureFlatHazeHorz
  4081.  
  4082.  
  4083. // VOID _DrawTextureGrdHazeHorz ( LONG Color, LONG LoopCount, LONG SkipRow, LONG SideClipped )
  4084. //
  4085. // EAX = Color, EDX = LoopCount, EBX = SkipRow, ECX = SideClipped
  4086.  
  4087. VOID _DrawTextureGrdHazeHorz ( LONG nColor, LONG nLoopCount, 
  4088.                                       LONG SkipRow, LONG SideClipped )
  4089. {
  4090. _asm {
  4091.   pushad
  4092.  
  4093.   mov EAX, nColor
  4094.   mov EDX, nLoopCount
  4095.   mov EBX, SkipRow
  4096.   mov ECX, SideClipped
  4097.   
  4098.   mov  Color, EAX
  4099.  
  4100.   sub  EDX, EBX
  4101.   mov  LoopCount, EDX
  4102.  
  4103.   cmp  EBX, 0
  4104.   je   CheckClippedTextureGrdHazeHorz 
  4105.  
  4106.     mov  EAX, _LeftDx
  4107.     imul  EBX
  4108.     add  _LeftX, EAX
  4109.  
  4110.     mov  EAX, _RightDx
  4111.     imul  EBX
  4112.     add  _RightX, EAX
  4113.  
  4114.     mov  EAX, _LeftDu
  4115.     imul  EBX
  4116.     add  _LeftU, EAX
  4117.  
  4118.     mov  EAX, _RightDu
  4119.     imul  EBX
  4120.     add  _RightU, EAX
  4121.  
  4122.     mov  EAX, _LeftDv
  4123.     imul  EBX
  4124.     add  _LeftV, EAX
  4125.  
  4126.     mov  EAX, _RightDv
  4127.     imul  EBX
  4128.     add  _RightV, EAX
  4129.  
  4130.     mov  EAX, _LeftDI
  4131.     imul  EBX
  4132.     add  _LeftI, EAX
  4133.  
  4134.     mov  EAX, _RightDI
  4135.     imul  EBX
  4136.     add  _RightI, EAX
  4137.  
  4138.     mov  EAX, _LeftDh
  4139.     imul  EBX
  4140.     add  _LeftH, EAX
  4141.  
  4142.     mov  EAX, _RightDh
  4143.     imul  EBX
  4144.     add  _RightH, EAX
  4145.     
  4146.     mov  EAX, _AddDest
  4147.     imul  EBX
  4148.     add  _DestBuffer, EAX
  4149.  
  4150.   CheckClippedTextureGrdHazeHorz :
  4151.     cmp  ECX, 0
  4152.     jne  DrawTextureGrdHazeHorzClip
  4153.  
  4154. ;  DrawTextureGrdHazeHorzNoClip :
  4155.     cld
  4156.     mov  ESI, LoopCount
  4157.     cmp  ESI, 0
  4158.     jle  EndLoopOutTextureGrdHazeHorz
  4159.     adc  EAX, 0        ; Make sure the loop starts with U pipe
  4160.     nop          
  4161.  
  4162.     LoopOutTextureGrdHazeHorz :
  4163.       mov  EBX, _LeftX    ; U
  4164.       mov  EAX, EBX        ; U
  4165.       add  EBX, _LeftDx   ; V
  4166.       sar  EAX, 16         ; U EAX is the Left X
  4167.       mov  _LeftX, EBX    ; V
  4168.  
  4169.       mov  EDX, _RightX   ; U
  4170.       mov  ECX, EDX        ; U
  4171.       add  EDX, _RightDx  ; V
  4172.       sar  ECX, 16         ; U ECX is the Right X
  4173.       mov  _RightX, EDX   ; V
  4174.  
  4175.       mov  EBX, _DestBuffer  ; U
  4176.       mov  EDI, EBX           ; U
  4177.       add  EBX, _AddDest     ; V
  4178.       sub  ECX, EAX           ; U
  4179.  
  4180.       mov  _DestBuffer, EBX  ; V
  4181.  
  4182.       add  EDI, EAX           ; U
  4183.       inc  ECX                ; V
  4184.  
  4185.       cmp  ECX, 0
  4186.       jle  NextRowTextureGrdHazeHorzNoClip
  4187.  
  4188.       mov  EBP, ECX
  4189.       shl  EBP, 2
  4190.       add  EBP, _DivTable
  4191.       fld  dword ptr [EBP]
  4192.       
  4193.       mov  EBP, ECX      ; EBP is the loop
  4194.  
  4195.       mov  EAX, _LeftI    ; U
  4196.       mov  EDX, _RightI   ; U      
  4197.       sub  EDX, EAX
  4198.       sar  EDX, 8
  4199.       mov  EAX, EDX
  4200.       sar  EDX, 01Fh
  4201.       idiv ECX
  4202.       mov  InDeltaDI, EAX
  4203.  
  4204.       mov  EAX, _LeftH    ; U
  4205.       mov  EDX, _RightH   ; U      
  4206.       sub  EDX, EAX
  4207.       sar  EDX, 8
  4208.       mov  EAX, EDX
  4209.       sar  EDX, 01Fh
  4210.       idiv ECX
  4211.       mov  InDeltaDh, EAX
  4212.  
  4213.       mov  EAX, _LeftU
  4214.       mov  EDX, _RightU         
  4215.       sub  EDX, EAX
  4216.       sar  EDX, 8
  4217.       mov  InDeltaDu, EDX
  4218.       fild InDeltaDu      
  4219.       fmul st, st(1)
  4220.       fistp InDeltaDu
  4221.       
  4222.       mov  EAX, _LeftV    
  4223.       mov  EDX, _RightV         
  4224.       sub  EDX, EAX
  4225.       sar  EDX, 8
  4226.       mov  InDeltaDv, EDX
  4227.       fild InDeltaDv      
  4228.       fmul st, st(1)
  4229.       fistp InDeltaDv
  4230.  
  4231.       fstp DummyFloat
  4232.  
  4233.       push ESI
  4234.  
  4235.       mov  ECX, _LeftU
  4236.       mov  EDX, _LeftV
  4237.       mov  ESI, _LeftI
  4238.       sar  ECX, 8
  4239.       sar  EDX, 8
  4240.       sar  ESI, 8
  4241.       mov  InLoopCount, BP
  4242.       mov  EBP, _LeftH
  4243.       sar  EBP, 8
  4244.      
  4245.         InLoopTextureGrdHazeHorz :
  4246.           mov  EBX, 0
  4247.           mov  BH, DH
  4248.           mov  BL, CH
  4249.           add  ECX, InDeltaDu
  4250.           add  EBX, _TextureBuffer
  4251.           mov  EAX, ESI
  4252.           mov  AL, [EBX]
  4253.           add  EDX, InDeltaDv
  4254.           add  EAX, _ShadeBuffer
  4255.           mov  EBX, EBP
  4256.           mov  BL, [EAX]
  4257.           add  EBX, _HazeBuffer
  4258.           add  EBP, InDeltaDh
  4259.           add  ESI, InDeltaDI
  4260.           mov  BL, [EBX]
  4261.           mov  [EDI], BL
  4262.           inc  EDI
  4263.           dec  InLoopCount
  4264.           jnz  InLoopTextureGrdHazeHorz
  4265.    
  4266.       pop  ESI
  4267.  
  4268.       NextRowTextureGrdHazeHorzNoClip :
  4269.         mov  EAX, _LeftU
  4270.         mov  EBX, _LeftV
  4271.         add  EAX, _LeftDu
  4272.         add  EBX, _LeftDv
  4273.         mov  _LeftU, EAX
  4274.         mov  _LeftV, EBX
  4275.  
  4276.         mov  EAX, _RightU
  4277.         mov  EBX, _RightV
  4278.         add  EAX, _RightDu
  4279.         add  EBX, _RightDv
  4280.         mov  _RightU, EAX
  4281.         mov  _RightV, EBX
  4282.  
  4283.         mov  EAX, _LeftI
  4284.         mov  EBX, _RightI
  4285.         add  EAX, _LeftDI
  4286.         add  EBX, _RightDI
  4287.         mov  _LeftI, EAX
  4288.         mov  _RightI, EBX
  4289.  
  4290.         mov  EAX, _LeftH
  4291.         mov  EBX, _RightH
  4292.         add  EAX, _LeftDh
  4293.         add  EBX, _RightDh
  4294.         mov  _LeftH, EAX
  4295.         mov  _RightH, EBX
  4296.  
  4297.         dec  ESI
  4298.       jnz  LoopOutTextureGrdHazeHorz
  4299.       jmp  EndLoopOutTextureGrdHazeHorz
  4300.  
  4301.   DrawTextureGrdHazeHorzClip :
  4302.     cld
  4303.     mov  ESI, LoopCount
  4304.     cmp  ESI, 0
  4305.     jle  EndLoopOutTextureGrdHazeHorz
  4306.     adc  EAX, 0        ; Make sure the loop starts with U pipe
  4307.     nop          
  4308.  
  4309.     LoopOutClippedTextureGrdHazeHorz :
  4310.       mov  EBX, _LeftX    ; U
  4311.       mov  EAX, EBX        ; U
  4312.       add  EBX, _LeftDx   ; V
  4313.       sar  EAX, 16         ; U EAX is the Left X
  4314.       mov  _LeftX, EBX    ; V
  4315.  
  4316.       mov  EDX, _RightX   ; U
  4317.       mov  ECX, EDX        ; U
  4318.       add  EDX, _RightDx  ; V
  4319.       sar  ECX, 16         ; U ECX is the Right X
  4320.       mov  _RightX, EDX   ; V
  4321.  
  4322.       mov  EBX, _DestBuffer  ; U
  4323.       mov  EDI, EBX           ; U
  4324.       add  EBX, _AddDest     ; V
  4325.       mov  _DestBuffer, EBX  ; U
  4326.  
  4327.       mov  TempLen, ECX
  4328.       sub  TempLen, EAX
  4329.       inc  TempLen
  4330.       mov  EBX, 0
  4331.  
  4332.         ; Check for Easy reject
  4333.         cmp  EAX, VMaxX      ; Left is greater than MaxX
  4334.         jg   NextRowTextureGrdHazeHorz
  4335.         cmp  ECX, VMinX      ; Right is smaller than MinX
  4336.         jl   NextRowTextureGrdHazeHorz
  4337.  
  4338.         ; Check for Left
  4339.         cmp  EAX, VMinX
  4340.         jge  CheckRightTextureGrdHazeHorz
  4341.           mov  EBX, VMinX
  4342.           sub  EBX, EAX
  4343.           mov  EAX, VMinX    ; Set Left to MinX
  4344.  
  4345.         ; Check for Right
  4346.         CheckRightTextureGrdHazeHorz :
  4347.           cmp  ECX, VMaxX
  4348.           jle  StartTextureGrdHazeHorz
  4349.           mov  ECX, VMaxX    ; Set Right to MaxX
  4350.  
  4351.     StartTextureGrdHazeHorz :
  4352.       sub  ECX, EAX
  4353.       inc  ECX
  4354.       add  EDI, EAX
  4355.  
  4356.       cmp  ECX, 0
  4357.       jle  NextRowTextureGrdHazeHorz
  4358.  
  4359.       mov  EBP, TempLen
  4360.       shl  EBP, 2
  4361.       add  EBP, _DivTable
  4362.       fld  dword ptr [EBP]
  4363.  
  4364.       mov  EBP, ECX      ; EBP is the loop
  4365.  
  4366.       mov  ECX, TempLen
  4367.       mov  TempLen, EBX    ; TempLen is now the skip pixel in x-direction
  4368.  
  4369.       mov  EAX, _LeftI    ; U
  4370.       mov  EDX, _RightI   ; U      
  4371.       sub  EDX, EAX
  4372.       sar  EDX, 8
  4373.       mov  EAX, EDX
  4374.       sar  EDX, 01Fh
  4375.       idiv ECX
  4376.       mov  InDeltaDI, EAX
  4377.  
  4378.       mov  EAX, _LeftH    ; U
  4379.       mov  EDX, _RightH   ; U      
  4380.       sub  EDX, EAX
  4381.       sar  EDX, 8
  4382.       mov  EAX, EDX
  4383.       sar  EDX, 01Fh
  4384.       idiv ECX
  4385.       mov  InDeltaDh, EAX
  4386.  
  4387.       mov  EAX, _LeftU    
  4388.       mov  EDX, _RightU         
  4389.       sub  EDX, EAX
  4390.       sar  EDX, 8
  4391.       mov  InDeltaDu, EDX
  4392.       fild InDeltaDu      
  4393.       fmul st, st(1)
  4394.       fistp InDeltaDu
  4395.       
  4396.       mov  EAX, _LeftV    
  4397.       mov  EDX, _RightV         
  4398.       sub  EDX, EAX
  4399.       sar  EDX, 8
  4400.       mov  InDeltaDv, EDX
  4401.       fild InDeltaDv      
  4402.       fmul st, st(1)
  4403.       fistp InDeltaDv
  4404.  
  4405.       fstp DummyFloat
  4406.  
  4407.       push ESI
  4408.  
  4409.       mov  InLoopCount, BP
  4410.       
  4411.       mov  EAX, InDeltaDh
  4412.       imul TempLen
  4413.       mov  EBP, _LeftH
  4414.       sar  EBP, 8
  4415.       add  EBP, EAX
  4416.  
  4417.       mov  EAX, InDeltaDu
  4418.       imul TempLen
  4419.       mov  ECX, _LeftU
  4420.       sar  ECX, 8
  4421.       add  ECX, EAX
  4422.  
  4423.       mov  EAX, InDeltaDI
  4424.       imul TempLen
  4425.       mov  ESI, _LeftI
  4426.       sar  ESI, 8
  4427.       add  ESI, EAX
  4428.       
  4429.       mov  EAX, InDeltaDv
  4430.       imul TempLen
  4431.       mov  EDX, _LeftV
  4432.       sar  EDX, 8
  4433.       add  EDX, EAX
  4434.        
  4435.         InLoopClippedTextureGrdHazeHorz :
  4436.           mov  EBX, 0
  4437.           mov  BH, DH
  4438.           mov  BL, CH
  4439.           add  ECX, InDeltaDu
  4440.           add  EBX, _TextureBuffer
  4441.           mov  EAX, ESI
  4442.           mov  AL, [EBX]
  4443.           add  EDX, InDeltaDv
  4444.           add  EAX, _ShadeBuffer
  4445.           mov  EBX, EBP
  4446.           mov  BL, [EAX]
  4447.           add  EBX, _HazeBuffer
  4448.           add  EBP, InDeltaDh
  4449.           add  ESI, InDeltaDI
  4450.           mov  BL, [EBX]
  4451.           mov  [EDI], BL
  4452.           inc  EDI
  4453.           dec  InLoopCount
  4454.           jnz  InLoopClippedTextureGrdHazeHorz
  4455.     
  4456.       pop  ESI
  4457.  
  4458.       NextRowTextureGrdHazeHorz : 
  4459.         mov  EAX, _LeftU
  4460.         mov  EBX, _LeftV
  4461.         add  EAX, _LeftDu
  4462.         add  EBX, _LeftDv
  4463.         mov  _LeftU, EAX
  4464.         mov  _LeftV, EBX
  4465.    
  4466.         mov  EAX, _RightU
  4467.         mov  EBX, _RightV
  4468.         add  EAX, _RightDu
  4469.         add  EBX, _RightDv
  4470.         mov  _RightU, EAX
  4471.         mov  _RightV, EBX
  4472.  
  4473.         mov  EAX, _LeftI
  4474.         mov  EBX, _RightI
  4475.         add  EAX, _LeftDI
  4476.         add  EBX, _RightDI
  4477.         mov  _LeftI, EAX
  4478.         mov  _RightI, EBX
  4479.  
  4480.         mov  EAX, _LeftH
  4481.         mov  EBX, _RightH
  4482.         add  EAX, _LeftDh
  4483.         add  EBX, _RightDh
  4484.         mov  _LeftH, EAX
  4485.         mov  _RightH, EBX
  4486.  
  4487.         dec  ESI
  4488.       jnz  LoopOutClippedTextureGrdHazeHorz
  4489.  
  4490.   EndLoopOutTextureGrdHazeHorz :
  4491.  
  4492.   popad
  4493. } // End asm
  4494. } // End of _DrawTextureGrdHazeHorz
  4495.  
  4496.